Python-魔法方法
python中以__xxx__
存在的方法被称为魔法方法。下面记录几个常用的。
__name__
当python文件被直接运行时,__name__
的值为__main__
,而当python文件以模块的形式被导入时,__name__
的值为模块名。
可以利用__name__ == __main__
隐藏不希望被作为导入模块执行的代码块。
__file__
在python模块中使用__file__
来获取脚本所在的相对路径,如果希望得到绝对路径可以使用os.path.realpath(__file__)
。
__module__
当前操作的对象在哪个模块。
__all__
当文件被以import *
方式导入时,哪些成员(变量、函数或类)会被导入进来。
__init__
和__new__
__init__
初始化方法,负责对实例化对象进行属性值初始化,此方法必须返回None。
__new__
是类构造方法,用于产生实例化对象,必须返回一个对象。
__new__
是在一个对象实例化的时候所调用的第一个方法- 它的第一个参数是这个类,其他的参数是用来直接传递给
__init__
方法 __new__
决定是否要使用该__init__
方法,因为__new__
可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果__new__
没有返回实例对象,则__init__
不会被调用__new__
主要是用于继承一个不可变的类型比如一个 tuple 或者 string
__del__
析构方法,当对象在内存中被释放时,自动触发此方法。
__call__
该方法提供给对象可以被执行的能力,当直接利用对象执行时,调用该方法。
__dict__
返回对象的属性字典,key为属性名,value为该属性的值。
__len__
可以通过len(A)
调用,在应用中主要用于返回数据集的长度。
__gititem__
定义该方法后,可以通过E(key)
调用,所以在定义时除了self参数外,还有key参数。在应用中通常用于数据集类中,返回索引到的数据。
1 | class E: |
__iter__
生成迭代对象时用,如果一个对象拥有__iter__方法,其是可迭代对象。该方法返回一个迭代器。内置函数iter()
调用的就是对象的__iter__
。
1 | class E: |
__next__
返回容器中的下一个元素,与__iter__
配合使用实现迭代器。内置函数next()
调用的就是对象的__next__
。
__add__
重载此方法可以使类的实例进行相加。
__abs__
有此方法可以直接使用abs
方法
1 |
|
__doc__
用于输出指定对象中的注释部分
1 | class Debug: |
参考资料
评论