零零散散的总结
#自省
hasattr(obj,'属性') #obj.属性 是否存在
getattr(obj,'属性') #获取obj.属性 不存在则报错
getattr(obj,'属性','默认值') #获取obj.属性 不存在不会报错, 返回默认值
setattr(obj,'属性','属性的值') #obj.属性 = 属性的值
delattr(obj,'属性') #del obj.属性
# __getattr__,__setattr__,__delattr__
obj.属性 的方式去操作属性时触发的方法
__getattr__: obj.属性 不存在时触发
__setattr__: obj.属性=属性的值 时触发
__delattr__: del obj.属性 时触发
__getitem__,__setitem__,__delitem__
obj['属性'] 的方式去操作属性时触发的方法
__getattr__: obj.['属性]' 时触发
__setattr__: obj['属性']=属性的值 时触发
__delattr__: del obj['属性'] 时触发
#__get__,__set__,__del__
描述就是一个新式类,这个类至少要实现上述三个方法中的一个
class 描述符:
def __get__(self, instance, owner):
pass
def __set__(self, instance, value):
pass
def __delete__(self, instance):
pass
class 类:
name = 描述符()
obj = 类
obj.name #-->触发get
obj.name = 'test' #-->触发set
del obj.name #-->触发del
#__del__ :析构方法
垃圾回收时触发
print 调用的就是str方法
网友评论