零基础入门学习Python(21):魔法方法(1)构造和析构

零基础入门学习Python(21):魔法方法(1)构造和析构

从这节开始,我们介绍下Python的魔法方法:魔法方法总是被双下划线包围。
之前有提到过初始化的魔法方法__init__(),它返回None,在类定义时有时写__init__()方法,有时不写,只有当我们需要对一个对象进行初始化操作时,才会重写__init__()方法。

>>> class Rectangle:
        def __init__(self,x,y):        #默认是没有参数的,但这里需要传入两个参数,即需求,所以重写了__init__方法
            self.x = x
            self.y = y
        def area(self):
            return self.x * self.y

>>> rect = Rectangle(2,3)
>>> rect.area()
6

下面介绍另一个初始化的魔法方法,实际上,下面这个魔法方法才是创建对象时第一个要调用的方法:
__new__(cls[, ...]): 是对象实例化的时候所调用的第一个方法,它第一个参数是 class ,后面有其他参数时,会原封不动的传给__init__()方法,很少被重写。
1)需要一个实例对象作为返回值;
2)当继承一个不可变类型,又需要进行修改的时候,重写

>>> class SortedList(list):           #继承列表,list是不可修改的
        def __new__(cls, list1):      #传入一个列表list1
            list1 = list.sort(list1)  #调用列表的内置方法sort(),把list1重写之后,让list调用
            return list.__new__(cls,list1)     #返回一个实例对象

>>> l = SortedList([3,4,2,8,6,10,3,5])
>>> l                                 #重写之后,直接调用就可以得到排序之后的列表
[2, 3, 3, 4, 5, 6, 8, 10]

最后再介绍一下Python中的析构器:
__del__(self) : 析构器,对象生成之后,当所有对它的引用都被 del 之后,会启动垃圾回收机制,当垃圾回收机制销毁对象的时候,就会调用这个方法。

>>> class Test:
        def __init__(self):
            print(' I am __init__ method, I am being called...')
        def __del__(self):
            print(' I am __del__ method, I am being called...')

>>> c1 = C()                         #生成一个实例化对象c1,调用了__init__()方法
 I am __init__ method, I am being called...
>>> c2 = c1                          #c2也指向c1这个对象的内存
>>> c3 = c2                          #c3也指向c1这个对象的内存,即此时有3个名字指向同一块内存区域
>>> del c3
>>> del c2
>>> del c1                           #删除出c3、c2、c1之后,没有名字再指向这个内存了,所以就自动调用了__del__魔法方法来销毁这个对象
 I am __del__ method, I am being called...

零基础入门学习Python(20)对象(5)类和对象的内置函数

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值