鱼C论坛

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

[技术交流] 章节十一:构造和析构

[复制链接]
发表于 2017-8-21 12:05:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 向西而笑 于 2017-8-24 16:53 编辑
课时41:构造和析构
这个课时教了三个基础的魔法方法,构造方法有__new__、__init__,析构方法有__del__。
__init__(self,*args,**kwargs):这个魔法方法是创建对象后初始化对象的,并且ta有且只能是默认的None作为返回值,否则报错。
例一:
>>> class X:
        def __init__(self,x,y):
                self.x = x
                self.y = y
        def sumx (self):
                return self.x + self.y

        
>>> c = X(1,9)
>>> c.sumx()
10

例二:返回除None外任何值就会抛错
>>> class Z:
        def __init__(self,x,y):
                self.x = x
                self.y = y
                return self.x+self.y
>>> c = Z(1,9)
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    c = Z(1,9)
TypeError: __init__() should return None, not 'int'


__new__(cls,*args,**kwargs):这个是对象实例化时所调用的第一个方法比,__init__方法还更先调用。__new__方法决定是否要调用__init__方法,因为__new__方法可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果__new__方法没有返回实例对象,则__init__方法不会被调用。
>>> class CapStr(str):
        def __new__(cls,string):
                print('正在调用__new__方法')
                string = string.upper()
                return str.__new__(cls,string)
>>> a = CapStr('abcdefg')
正在调用__new__方法
>>> a
'ABCDEFG'


__del__(self):这是一个析构器,当没有任何对象引用时就会自动删除,举例:
>>> class X:
        def __init__(self):
                print("__init__方法正在被调用...")
        def __del__(self):
                print("__del__方法正在被调用...")
>>> a = X()
__init__方法正在被调用...
>>> b = X()
__init__方法正在被调用...
>>> c = a
>>> del b
__del__方法正在被调用...
>>> del a
>>> del c
__del__方法正在被调用...

评分

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

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

 楼主| 发表于 2017-8-21 12:11:59 | 显示全部楼层
代码片段出现bug了,等管理来处理吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-21 12:17:10 | 显示全部楼层
先吃午饭去了,下午再看管理怎么处理吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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