Python学习笔记--魔法方法

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\test.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

#运行结果:
我是初始方法
-----------
我是删除方法

 

posted @ 2020-11-03 00:13  菜鸡要加油  阅读(59)  评论(0编辑  收藏  举报