初始化函数:初始化属性
init(self)
真正的构造函数是__new__()
析构函数
del(self)
删除对象的属性
delattr(对象, 属性)
对象是否有某个属性
hasattr(对象, 属性)
静态变量和静态方法
1. 静态变量:定义在函数外边
2. 静态方法:@staticmethod修饰,不需要 self 参数,属于类
3. 类方法:classmethod 修饰,函数不需要实例化,不需要 self 参数,但第一个参数是表示自身类的 cls 参数(cls代表类,self代表类实例),可以来调用类的属性,类的方法,实例化对象等。
@classmethod
def fun(cls, arg):
return cls(arg)
调用方式:类名.fun(xxx),实际上是实例化出一个对象
实现过程:cls() ---> cls的__new__方法创建实例 ---> __init__ 初始化
类方法:当前类相关的信息的对象
1. 类方法的第一个参数约定名为cls
2. 通过这个参数我们可以获取和类相关的信息并且可以创建出类的对象
只读和只写方法装饰器
1. 只读特性(getter访问器):@property
2. 只写特性(setter修改器): @属性.setter
限定绑定
1. Python是动态语言,在程序运行时给对象绑定新的属性或方法,或对已经绑定的属性和方法进行解绑定
2. 通过__slots__限定对象只能绑定某些属性
3. __slots__只对当前类的对象生效,对子类并不起任何作用
4. __slots__ = (属性名)
封装性:隐藏细节
1. 只有公有和私有
2. 私有属性和方法:在名称前加两个下划线
3. 其实是给私有的属性和方法换了一个名字,一定要在外部访问的话通过 对象._类名__属性或方法名
继承
1. 如果没有父类,则继承自object(新式类,避免棱形继承)
2. 多继承:谁在前面优先继承谁
3. 初始化父类的构造函数:super().__init__(self)
4. issubclass(子类, 父类) 这个子类是否是父类的子类
抽象类:不能实例化
1. 通过`abc`模块的`ABCMeta`元类和`abstractmethod`包装器来达到抽象类
from abc import ABCMeta, abstractmethod
class Student(object, metaclass=ABCMeta):
@abstractmethod
def eat(self):
pass