setattr
例子说明setattr的无限递归错误:
def __setattr__(self, name, value):self.name = value# 每一次属性赋值时, __setattr__都会被调用,因此不断调用自身导致无限递归了。正确写法:def__setattr__(self, name, value):self.__dict__[name] = value #self[k]=value
new
new实现单例模式
class Student(object):instance = Nonedef __new__(cls, *args, **kwargs):if cls.instance is None:cls.instance = super(Student, cls).__new__(cls, *args, **kwargs)return cls.instance #类属性不是实例属性,在实例中共享s1 = Student()s2 = Student()s1.value = 20print(s1, s2)print(s1.value, s2.value)print(s1 is s2)############## 打印结果如下 ##############<__main__.Student object at 0x1033a1c88> <__main__.Student object at 0x1033a1c88>20 20True
with exit
def __enter__(self):return selfdef __exit__(self, exc_type, exc_val, exc_tb):pass
