鱼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__方法,不过当我们想要继承一个不可变类型,但又需要进行修改时,这个方法就很重要了:
③__del__(self) 当对象将要被销毁时,这个方法就会被自动调用。
注意: del x != x.__del__()——不是发生del就调用,而是当对某一对象所有的引用都被del之后,才会由垃圾回收机制调用
魔法方法(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__方法,我被调用了
相关文章推荐
- 零基础入门学习Python(21):魔法方法(1)构造和析构
- 041魔法方法:构造和析构
- python魔法方法-构造方法详解
- swift学习笔记之构造方法和析构方法
- 魔法方法——构造和析构__init__和__new__
- Python学习笔记009_构造与析构
- python构造方法学习笔记(一)
- php学习笔记 面向对象的构造与析构方法
- 鱼c笔记——Python魔法方法五:定制序列
- 第9章 Python笔记 魔法方法、属性和迭代器
- php学习笔记------[面向对象的构造与析构方法]
- 鱼c笔记——Python魔法方法六:迭代器
- python面向对象开发3 (内部类-构造-析构)魔术方法)
- 鱼c笔记——Python魔法方法三:属性访问
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- swift自学笔记(六)(构造方法、析构方法)
- python 学习笔记-构造方法
- php学习笔记------[面向对象的构造与析构方法]
- Python类方法__init__和__del__构造、析构过程分析