马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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__方法正在被调用...
|