01
__魔法方法__
什么是魔法方法:从表现上来看,它是不需要调用函数,写出函数名,传入参数才能执行的方法,而是在进行某一操作时根据操作内容自动执行的方法
__init__(self[, ...]):初始化,在实例化时自动调用的方法,当有需要从外部传入的属性值时,__init__必须存在,被重写。该方法不可存在返回值。
__new__(class[,...]):实例化过程中第一个执行的方法,一般不用重写,除非一个类继承不可变类。
__del__(self):对象销毁时自动调用,当变量取消时用于删除内存中的垃圾
python无处不对象,int,string...各种类型都是对象,int类里面内置许多算术魔法方法:
__add__(self,other) __sub__(self,other) __mul__(self,other)
__truediv__(self,other) __floordiv__(self,other)等
当我们重写这些算术方法时,形成新的类,'新类+新类' 的表现不会和 1+1相同,这属于多态,因此:
class Myint(int):
def __add__(self,other):
return self + other
相当于对自身的无限递归,不会得到想象的结果
class Myint(int):
def __add__(self,other):
return int(self) + int(other)
这才是正确的结果
属性访问的方法:
1):直接 a.attribution访问
2):使用方法getattr(a,attribution,prompt)
3):使用property访问,x = property(getSize,setSize,delSize)
设置属性也可能掉入死循环的陷阱:
如:
class Rectangle:
def __init__(self,height=0,width=0):
self.height = height //为属性赋值的时候自动调用
self.width = width //方法__setattr__
def __setattr__(self,name,value):
# self.name = value //由于重写了__setattr__,
# 正确的方法 //此时的=已经不能发挥预期的效果陷 super.setattr(name,value) //入死循环
转自鱼C工作室
领取专属 10元无门槛券
私享最新 技术干货