鱼C论坛

 找回密码
 立即注册
查看: 2170|回复: 2

[技术交流] 39 魔法方法:构造和析构 - 景命

[复制链接]
发表于 2017-8-28 19:09:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
知识点:

魔法方法总是被双下划线包围,例如__init__()
魔法方法是面向对象的Python的一切,如果你不知道魔法方法,说明你还没意识到面向对象的Python的强大。
魔法方法的“魔力”体现在他们总能够在适当的 时候被自动调用。


魔法方法:
1.__init__(self[, ...])

        #构造方法。在实例化对象的时候被调用。
                参数:self是实例对象。后面跟的是实例对象的参数。
                返回值:None
        例:
                # 我们定义一个矩形类,需要长和宽两个参数,拥有计算周长和面积两个方法。
                # 我们需要对象在初始化的时候拥有“长”和“宽“两个参数,因此我们需要重写__init__()方法
                # 因为我们说过,__init__()方法是类在实例化成对象的时候首先会调用的一个方法,大家可以理解吗?
>>> class Rectangle:
        def __init__(self,x,y):
                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()
>>> rect.getArea()
12
>>> rect.getPeri()
14


2.__new__(cls[, ...])
        #在实例化对象时第一个被调用的方法。一般不会重写,但是当前类继承了一个不可变类型又必须修改的时候。
                参数:cls表示这个类。后边的参数会原封不动的传给__init__()方法。
                返回值:必须返回一个实例对象,通常是class这个类的实例对象。当然也可以返回别的类的实例对象。
        例:
>>> class CapStr(str):
        def __new__(cls,string):                        #重写__new__()方法,设置一个string参数。
                string = string.upper()                #将string参数改变为全部大写,并重新赋值。
                return str.__new__(cls,string)        #返回父类的__new__()方法。

>>> a = CapStr("I love Fishc.Com")


3.__del__(self)
        #析构(销毁)对象时自动调用的方法。注意:del x != x.__del__()。
                参数:实例对象。
        例:
>>> class C:
        def __init__(self):
                print("我是__init__()方法,我被调用了...")
        def __del__(self):
                print("我是__del__()方法,我被调用了...")

                
>>> c1 = C()
我是__init__()方法,我被调用了...
>>> c2 = c1
>>> del c2
>>> del c1
我是__del__()方法,我被调用了...
>>> c1 = C()
我是__init__()方法,我被调用了...
>>> del c1
我是__del__()方法,我被调用了...

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-6 21:24:42 | 显示全部楼层
rect = Rectangle(3,4)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 09:29:07 | 显示全部楼层
总结的不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 20:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表