魔术方法¶
__str__()
¶
Abstract
- 触发时机:使用print(对象)或者str(对象)的时候触发
- 参数:一个self接收对象
- 返回值:必须是字符串类型
- 作用:print(对象时)进行操作,得到字符串,通常用于快捷操作
- 调用方式:
print(obj)
另外,还有一个与__str__()
相同的子方法:__repr__()
,效果一样,适用于调试时,区别在于
>>> print(obj)
时调用的是 __str__()
>>> obj
时调用的是 __repr__()
__call__()
¶
Abstract
调用对象的魔术方法
- 触发时机:将对象当作函数调用时触发 对象()
- 参数:至少一个self接收对象,其余根据调用时参数决定
- 返回值:根据情况而定
- 作用:可以将复杂的步骤进行合并操作,减少调用的步骤,方便使用
- 调用方式:
obj()
示例中只是简单调用自身函数,实际过程中可能会有更多如开启线程,调用别的类等复杂操作
很多时候,需要判断一个对象能否被调用,能被调用的对象就是一个Callable
函数,和带有 __call__()
的类对象就是Callable
可以通过 callable(obj)
来判断一个对象是否可以被调用
__iter__()
¶
调用对象的魔术方法
- 触发时机:对象被用于
for...in
- 参数:至少一个self接收对象
- 返回值:根据情况而定
- 作用:使类具有可迭代的能力
- 调用方式:
for...in obj
如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,
该方法返回一个迭代对象,
然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,
直到遇到StopIteration错误时退出循环。
以斐波那契数列为例,写一个Fib类,可以作用于for循环:
__getitem__()
¶
__getattr__()
¶
- 触发时机:获取不存在的对象成员时触发
- 参数:1接收当前对象的self,一个是获取成员名称的字符串
- 返回值:必须有值
- 作用:为访问不存在的属性设置值
- 注意:getattribute无论何时都会在getattr之前触发,触发了getattribute就不会在触发getattr了