Python中的魔术方法
1.__str__,__repr__方法
使用print()打印时触发
__str__的优先级更高:
__str__和__repr__都存在时只会触发__str__
2.__del__方法
在对象被删除时触发
对象未被引用时会自动触发
3.isinstance()和issubclass()
isinstance(obj, cls) 检查obj是否是类cls的对象
class Foo(object): pass obj = Foo() isinstance(obj, Foo)
>>> True
issubclass(sub, super) 检查sub类是否是super的派生类
class Foo(object): pass class Bar(Foo): pass issubclass(Bar, Foo)
>>> True
4.__doc__方法
能够识别类内注释文字
class Foo:
'我是描述信息'
pass
print(Foo.__doc__)
>>> 我是描述信息
# 无法继承给子类
5.__enter__,__exit__方法
上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__enter__和__exit__方法
先执行__enter__再执行with()语句最后执行__exit__
__exit__(self, exc_type, exc_val, exc_tb)
__exit__()中的三个参数分别代表异常类型,异常值和追溯信息,with语句中代码块出现异常,则with后的代码都无法执行
如果__exit()返回值为True,那么异常会被清空,就好像啥都没发生一样,with后的语句正常执行
6.__setattr__,__delattr__,__getattr__
__setattr__添加/修改属性会触发它的执行
__delattr__删除属性的时候会触发
__getattr__只有在使用点调用属性且属性不存在的时候才会触发
7.__setitem__,__delitem__,__getitem__
同上,但是调用方式不同
setattr ====> 调用方式: f.xxx
setitem ====> 调用方式: f['xxx']
8.__call__方法
注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
obj = Foo() # 执行__init__
obj() # 执行__call__
9.__new__方法
在类准备将自身实例化时调用。

浙公网安备 33010602011771号