面向对象编程
__del__方法(析构函数)和垃圾回收机制
__del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。
Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用__del__方法。
也可以通过del语句删除对象,从而保证调用__del__方法
__call__方法和可调用对象
定义了__call__方法的对象,称为“可调用对象”,即该对象可以像函数一样被调用
方法的重载
在其他语言中,可以定义多个重名的方法,但在Python中,方法的参数没有类型,因此Python中没有方法的重载。如果在类体中定义了多个重名的方法,只有最后一个方法有效
方法的动态性
Python是动态语言,可动态的为类添加新的方法,或者动态的修改类的已有的方法
私有属性和私有方法(实现封装)
Python对于类的成员没有严格的访问控制限制,关于私有属性和私有方法,有如下要点:
1.两个下划线开头的属性是私有的(private),其他为公共的(public)
2.类内部可以访问私有属性(方法)
3.类外部不能直接访问私有属性(方法)
4.类外部可通过“_类名__私有属性(方法)名”访问私有属性(方法)
@property装饰器
@property可以将一个方法的调用方式变成“属性调用”
面向对象三大特征
封装(隐藏)
隐藏对象的属性和实现细节,只对外提供必要的方法
继承
继承可以让子类具有父类的特性,提高了代码的重用性
多态
多态是指同一个方法调用由于对象不同会产生不同的行为
继承
语法格式:
class 子类类名(父类1[,父类2,...]):
类体
定义子类时,必须在其构造函数中调用父类的构造函数,格式如下:
父类名.__init__(self,参数列表)
类成员的继承和重写
1.成员继承:子类继承了父亲除构造方法之外的所有成员
2.方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类的方法,也称为“重写”
查看类的继承层次结构
通过类的方法mro()或者类的属性__mor__可以输出这个类的继承层次结构
object类根
object类是所有类的父类,所有的类都有object类的属性和方法
dir()查看对象属性
以上有几个要点:
1.Person对象增加了六个属性:__dict__,__module__,__weakref__,age,name,say_age
2.object的所有属性,Person类作为object的子类,包含了所有的属性
3.say_age是方法,也是属性,类型是“method”
重写__str__()方法
object有一个__str__()方法,用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮助查看对象的信息,__str__()可以重写
多态
同一个方法调用由于对象不同可能会产生不同的行为。
注意:1.多态是方法的多态,属性没有多态
2.多态的存在有2个必要条件:继承、方法重写
特殊方法和运算符重载
常用的特殊方法如下:
每个运算符实际上也都对应了相应的方法:
特殊属性
Python对象中包含了很多双下划线开始和结束的属性,是特殊属性,有特殊用法