据说,Python的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的Python的一切。
他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重)载了这些方法中的某一个,那么这个方法就会在特殊的情况下被Python所调用,你可以定义自己想要的行为,而这一切都是自动发生的。
Python的魔术方法非常强大,然而随之而来的则是责任。了解正确的方法去使用非常重要。
魔法方法
含义
<>强基本的魔法方法强>
__new__ (cls […])
-
<李>新是在一个对象实例化的时候所调用的第一个方法李>
<李>它的第一个参数是这个类,其他的参数是用来直接传递给init方法李>
<李>新决定是否要使用该初始化方法,因为新的可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果新没有返回实例对象,则初始化不会被调用李>
<李>新主要是用于继承一个不可变的类型比如一个元组或者string__init__(自我[…])构造器,当一个实例被创建的时候调用的初始化方法李>
__del__(自我)析构器,当一个实例被销毁的时候调用的方法
__call__(自我(args…))允许一个类的实例像函数一样被调用:x (a, b)调用x。__call__ (a, b)
__len__(自我)定义当被len()调用时的行为
__repr__(自我)定义当repr()被调用时的行为
__str__(自我)定义当被str()调用时的行为类似于Java中toString方法
__bytes__(自我)定义当被字节()调用时的行为
__hash__(自我)定义当被散列()调用时的行为
__bool__(自我)定义当被bool()调用时的行为,应该返回真或假
__format__(自我,format_spec)定义当被格式()调用时的行为
<强>有关属性强>
__getattr__(自我,名称)定义当用户试图获取一个不存在的属性时的行为
__getattribute__(自我,名称)定义当该类的属性被访问时的行为
__setattr__(自我、名称、值)定义当一个属性被设置时的行为
__delattr__(自我,名称)定义当一个属性被删除时的行为
__dir__(自我)定义当dir()被调用时的行为
__get__(自我、实例所有者)定义当描述符的值被取得时的行为
__set__(实例,自我价值)定义当描述符的值被改变时的行为
__delete__(自我)定义当描述符的值被删除时的行为
<强>比较操作符强>
__lt__(自我,其他)定义小于号的行为:x & lt;y调用x.__lt__ (y)
__le__(自我,其他)定义小于等于号的行为:x & lt;=y调用x.__le__ (y)
__eq__(自我,其他)定义等于号的行为:x==y调用x.__eq__ (y)
__ne__(自我,其他)定义不等号的行为:x !=y调用x.__ne__ (y)
__gt__(自我,其他)定义大于号的行为:x比;y调用x.__gt__ (y)
__ge__(自我,其他)定义大于等于号的行为:x祝辞=y调用x.__ge__ (y)
<强>算数运算符强>
__add__(自我,其他)定义加法的行为:+
__sub__(自我,其他)定义减法的行为:-
__mul__(自我,其他)定义乘法的行为:*
__truediv__(自我,其他)定义真除法的行为:/
__floordiv__(自我,其他)定义整数除法的行为://
__mod__(自我,其他)定义取模算法的行为:%
__divmod__(自我,其他)定义当被divmod()调用时的行为
__pow__(自我,其他(模))定义当被权力()调用或* *运算时的行为
__lshift__(自我,其他)定义按位左移位的行为:& lt; & lt;
__rshift__(自我,其他)定义按位右移位的行为:在祝辞
__and__(自我,其他)定义按位与操作的行为:,
__xor__(自我,其他)定义按位异或操作的行为:^
__or__(自我,其他)定义按位或操作的行为:|
<强>反运算强>
__radd__(自我,其他)(与上方相同,当左操作数不支持相应的操作时被调用)
__rsub__(自我,其他)(与上方相同,当左操作数不支持相应的操作时被调用)
__rmul__(自我,其他)(与上方相同,当左操作数不支持相应的操作时被调用)
__rtruediv__(自我,其他)(与上方相同,当左操作数不支持相应的操作时被调用)
__rfloordiv__(自我,其他)(与上方相同,当左操作数不支持相应的操作时被调用)
__rmod__(自我,其他)(与上方相同,当左操作数不支持相应的操作时被调用)