您的位置:首页 > 编程语言 > Python开发

鱼c笔记——Python魔法方法一:构造和析构

2018-02-04 11:41 316 查看
什么是魔法方法:

魔法方法(magic method)就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被Python所调用,你可以定义自己想要的行为,而这一切都是自动发生的。它们经常是两个下划线包围来命名的,(比如__init__(), __hasattr__()),Python的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要。

下面来介绍两个魔法方法,构造和析构

①__init__(self[, ...]) 类在实例化对象的时候首先会调用的方法,返回值是None,不能在__init__() 方法里用return
http://blog.csdn.net/sinat_41104353/article/details/79248849这篇文章的例子里有__init__(self)的用法例子
②__new__(cls[, ...]) 实例化对象时第一个被调用的方法, 第一个参数是class类,如果后面有参数,参数会原封不动的传给__init__()方法,__new__方法需要一个实例对象作为返回值通常是返回class这个类的实例对象,不过也可以返回其他类的实例对象。

不过我们极少重写__new__方法,不过当我们想要继承一个不可变类型,但又需要进行修改时,这个方法就很重要了:

>>> class CapStr(str):   #因为str是一个不可改变的类型,即str不可修改,所以我们应该在实例化之前的第一步对str进行修改
'利用CapStr的实例对象实现,无论传入大写还是小写字符均转换为大写'
def __new__(cls, string):    #如果没有重写,会调用基类str的方法
string = string.upper()
return str.__new__(cls, string)   #让str的__new__来处理string,返回处理好后的大写字符串

>>> a = CapStr("Harry Potter")   #类CapStr继承了一个不可改变的类型,因为不可改变,我们不能在__init__()方法内对自身进行修改,因为自身是一个不可改变的对象,所以我们应该在__new__的时候对它进行替换
>>> a
'HARRY POTTER'


③__del__(self) 当对象将要被销毁时,这个方法就会被自动调用。

注意: del  x != x.__del__()——不是发生del就调用,而是当对某一对象所有的引用都被del之后,才会由垃圾回收机制调用

>>>
9fe2
class C:
def __init__(self):
print("我是__init__方法,我被调用了")
def __del__(self):
print("我是__del__方法,我被调用了")

>>> c1 = C()
我是__init__方法,我被调用了
>>> c2 = c1                 #现在有c1,c2两个(变量)标签指向对象
>>> c3 = c1

>>> del c2
>>> del c3
>>> del c1
我是__del__方法,我被调用了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: