一、什么是魔法方法:
1)魔法方法总是被双下划线所包围
2)魔法方法是面向对象的Python的一切,如果你不知道魔法方法,说明你还没能意识到面向对象的python的强大
3)魔法方法的‘魔力’体现在它们总能够在适当的时候被调用
二、__init__(self[,...])方法:相当于构造方法,默认是没有参数,并且是没有返回值
1)在我们的现实生活中,有一种东西刺激这我们奋斗,这就是我们的需求
class Rectangle: def __init__(self,x,y):#因为这儿需要长和宽,故而调用并改写init方法并传入长和宽 self.x = x self.y = y def getPeri(self): return (self.x+self.y)*2 def getArea(self): return self.x*self.y rect = Rectangle(3,4) print(rect.getArea()) print(rect.getPeri())
二、__new__(cls[,...]):此方法是类实例化时调用的第一个魔法方法,第一个参数是
cls也就是这个类,如果后面有参数,则参数会全部不变的传递给init方法,这个方法需要实例对象作为返回,通常是将
cls 类的实例对象返回,但是也可以返回其他类的实例对象,平时基本不用,只有一种情况需要重写这个魔法方法,就是当你继承一个不可变类又要进行修改时,
class CapStr(str):#由于CapStr类继承与str,一个不可改变的类型,不可改变则不能在init 中对他进行修改,因为他自身不能被修改 def __new__(cls,string):#所以在new的时候进行替换,替换后调用时就是我们改造后的new了,如果没有进行重写则是调用基类str的new方法 string = string.upper() return str.__new__(cls,string) a = CapStr('h ,ha') print(a)#结果:H ,HA class CapStr2(str): pass b = CapStr2('haha') print(b)#结果:haha
三、__del__(self):如果说init()和new()是对象的构造器,那么del方法则是销毁对象
注意:del x 不等于x.__del__();del()方法是当垃圾回收机制自动销毁时,会自动调用对象的del()方法
class C: def __init__(self): print('init ') def __del__(self): print('del') c1 = C()#结果:init del