1.__init__()方法
实例化对象时首先会调用的方法,返回值只能是None,不能是其他
#__init__()方法 class Class1: x=0 y=0 z=0 def __init__(self,x,y): self.x=x self.y=y def __init__(self,x,y,z): self.x=x self.y=y self.z=z def getArea(self): if self.z==0: print("z为0") else: return self.x*self.y*self.z c1=Class1(2,3) c1.getArea() c2=Class1(2,3,4) print(c2.getArea())
运行结果:
Traceback (most recent call last): File "d:PythonWorkSpace.vscode est.py", line 248, in <module> c1=Class1(2,3) TypeError: __init__() missing 1 required positional argument: 'z'
由此可见,python后续写的会覆盖之前的__init()__方法
#__init__()方法 class Class1: x=0 y=0 z=0 def __init__(self,x,y): self.x=x self.y=y def __init__(self,x,y,z): self.x=x self.y=y self.z=z def getArea(self): if self.z==0: print("z为0") else: return self.x*self.y*self.z c1=Class1(2,3,0) c1.getArea() c2=Class1(2,3,4) print(c2.getArea()) #运行结果: z为0 24
2.__new__(cls[,...])
__new__()方法事实上才是一个对象实例化时候调用的第一个方法,他的第一个参数不是Self而是这个类(cls),而其他的参数会直接传递给__init__()方法
__new__()方法需要返回一个实例对象,通常是cls这个类实例化的对象,当然也可以返回其他的对象
__new__()方法很少去重写
3.__del__(self)
python提供了一个析构器,成为__del__(),当对象要被销毁的时候,这个方法就会被调用。
但并非del x时候就相当于自动调用x.__del__(),__del()__是当垃圾回收机制回收这个对象的时候调用的
#__del__() class Class1: def __init__(self): print("我是初始方法") def __del__(self): print("我是删除方法") c1=Class1() c2=c1 # c3=c2 del c1 print("-----------") del c2 #运行结果: 我是初始方法 ----------- 我是删除方法