摘要: 对于__getattr__和__getattribute__的作用,它们分别拦截未定义的以及所有的属性获取,这使得它们很适合用于基于委托的编码模式。尽管对于常规命名的属性来说是这样,但它们的行为需要一些额外的澄清:对于隐式地使用内置操作获取的方法名属性,这些方法可能根本不会运行。这意味着操作符重
阅读全文
摘要:一、函数装饰器的运用 示例一:编写计时装饰器 1.简易版装饰器:该装饰器支持装饰普通方法,也支持类中的方法,但是不支持传入装饰器参数; def timer(func): """ 用于对函数计时,不支持传入装饰器参数; 该装饰器支持装饰普通方法,也支持类中的方法 """ def onCall(*arg
阅读全文
摘要:一、元类的使用原理 我们先从类的class语句协议说起,当我们用class语句协议创建一个类,当执行到class语句的末尾,python会自动调用type对象来创建class对象。 class = type(classname, superclasses, attributedict) ty
阅读全文
摘要:exception,traceback和sys.exc_info()区别 1.exception 作用:能看到错误提示 def fake_exception(): 1 / 0 def catch_exception(): try: fake_exception() except Exception
阅读全文
摘要:__getattr__和__getattribute__是python中的运算符重载方法,它们提供了拦截类实例的属性获取。 两者的区别: __getattr__针对未定义的属性运行(那些没有在一个实例上出现的属性,以及没有从它的任何类继承的属性)。 __getattribute__针对所有的属性运行
阅读全文
摘要:起步 Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意线程可以同时加;而写锁只能有一个线程,且必须在没有读锁时才能加上。 简单的实现 impo
阅读全文
摘要:技巧:用datetime模块处理时区转换,不要用time模块 time模块 time模块只能转换本地时区的时间,不能转换其他时区的时间 比如以下例子对本地时区(CST)进行转换,程序能运行: time_format = "%Y-%m-%d %H:%M:%S %Z" time_str = "2021-
阅读全文
摘要:我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__enter__和__exit__方法 class Open: def __init__(self,
阅读全文