构造和析构
2017-07-16 11:34
127 查看
1.魔法方法总是被双下划线包围,例如: __init__
2.魔法方法是面向对象的Python的一切
3.魔法方法的魔力体现在它们总能够在适当的时候被自动调用
初始化实例对象时,真正被调用的是__new__(cls[,...]) ,此函数在__init__之前被调用,如果这个new函数有参数的话,这些参数会原封不动的传给init方法。new方法需要有一个实例对象作为返回值 ,通常返回cls的实例对象,也可以返回其他类的实例对象。一般这个new方法不需要被重写,但是当继承的是一个不可变类而这个类需要被修改的时候,就需要重写这个方法了。
例子中的CapStr继承了不可改变的类str,不可能在init方法中对它进行修改,所以要在new中进行替换,转换后调用新的string的new
python也提供了析构器, __del__(self) 但是注意,del x 不等于 x.__del__() ,这个__del__(self) 相当于是垃圾回收机制,当没有任何变量引用这个对象的时候,python会自动调用垃圾回收机制 ,这时候才会调用__del__(self)方法。 只用当所有的引用都被del之后,才会启动垃圾回收机制,真正的调用del,销毁这个对象,如下:
2.魔法方法是面向对象的Python的一切
3.魔法方法的魔力体现在它们总能够在适当的时候被自动调用
初始化实例对象时,真正被调用的是__new__(cls[,...]) ,此函数在__init__之前被调用,如果这个new函数有参数的话,这些参数会原封不动的传给init方法。new方法需要有一个实例对象作为返回值 ,通常返回cls的实例对象,也可以返回其他类的实例对象。一般这个new方法不需要被重写,但是当继承的是一个不可变类而这个类需要被修改的时候,就需要重写这个方法了。
例子中的CapStr继承了不可改变的类str,不可能在init方法中对它进行修改,所以要在new中进行替换,转换后调用新的string的new
python也提供了析构器, __del__(self) 但是注意,del x 不等于 x.__del__() ,这个__del__(self) 相当于是垃圾回收机制,当没有任何变量引用这个对象的时候,python会自动调用垃圾回收机制 ,这时候才会调用__del__(self)方法。 只用当所有的引用都被del之后,才会启动垃圾回收机制,真正的调用del,销毁这个对象,如下:
相关文章推荐
- 深度探索C++对象模型(五)构造、析构、拷贝语意学
- 一、类、对象、传值引用、$this关键字、静态属性和静态方法、self、构造方法、析构方法
- unity3D-游戏/AR/VR在线就业班 C#入门构造和析构课后习题
- 构造、拷贝构造、析构
- 先构造的一定后析构么,后构造的一定先析构么?
- PHP面向对象:构造方法和析构方法
- 程序入口函数和glibc及C++全局构造和析构
- 7、构造和析构-上
- 第11周--继承派生析构构造的顺序
- 类的成员变量构造和析构问题
- php面向对象(OOP)—构造方法与析构方法
- 什么是构造和析构方法?功能是?
- 构造和析构的顺序
- C++对象构造,析构,new,delete分析
- 局部变量类成员化的设计思路:减少变量频繁构造,析构的时间成本和内存成本
- 复数类的相关运算(判断大小及四则运算)->(构造,析构,拷贝复制,运算符重载)
- 构造.析构.深拷贝和浅拷贝
- 条款09:绝不在构造和析构过程中调用virtual函数
- 继承中的构造与析构-15
- PHP的构造方法,析构方法和this关键字详细介绍