魔术方法

Source

魔术方法:将下划线放到方法的两端
init
必须接受一个位置参数(self),然后可以申请任意数量的参数
创建实例后立即执行,为创建对象后提供初始化方法,不返回任何值。
new
第一个参数cls(创建实例所需的类)
在__init__方法之前执行,用于创建类的实例
new__方法的其他参数会被复制给__init
函数时首先被传递给__new__方法,然后被传递给__init__方法
只有通过__new__返回当前类的实例才会调用__init__
del
__del__在对象被销毁时调用(由垃圾回收器进行内存回收)
str
接受一个位置参数self,在对象传递给str的构造函数时调用,返回一个字符串
bool
接受一个位置参数(self)返回True或者False
eq
必须接受两个参数(一般来说时self和other)
首先检测左边对象的__eq__是否存在,存在则使用该方法,不存在则使用右边对象的__eq__方法(函数位置对调)
如果被比较的两个对象中一个对象时另外一个对象的直接子类,则调用子类的__eq__方法
ne(不相等)
对__eq__方法返回的结果取反
操作符重载
1>、二元操作符(+、-)【两个位置参数self和other】
①、普通方法,表达式x+y与x.add(y)匹配,返回结果
②、取反方法,第一个操作数不提供传统方法或者操作对象类型不同时调用取反方法,例如:表达式x+y,x没有定义__add__方法,则调用取反方法y.radd(x)
③、即席方法,在操作符即席修改第一个变量时调用。在正常方法前面加i。表达式x+=y将会调用x.iadd(y)
2>、一元操作符(+、-、~)【一个位置参数self】
①、pos
②、neg
③、invert
重载的常见方法
①、format(接受两个参数。self和字符串)
格式化输出
②、instanceheck
内置的isinstance方法检查一个对象是否时类的实例,也可以检查一个类是否继承于另外一个类
③、subclassheck
检查提供的两个参数是否是同一个类