1.1 彻底理解面向对象的基础理念
@staticmethod
def method_name(*args,**kwargs):
//pass
2.1 彻底掌握对象属性和对象方法
类的构造函数
对类进行实例化时,如果没有定义构造函数,那么Python将会自动创建一个不带参数的构造函数来进行实例化。
语法结构:
class Class_Name:
def _ _init_ _(self):
//pass
_ _init_ _就是构造函数,self表示当前对象。不管是cls还是self,都是一种通用写法(意思就是可以写成其他名),Python会自动将当前对象或类型进行绑定,无需显示地传递。
实例化后,构造函数会自动执行
def method_name(self):
//pass
class Child(Parent1,Parent2,....):
//pass
子类可以调用父类的方法,如子类中定义了与父类同名的方法,则会覆盖。
4.1 彻底掌握魔术属性和魔术方法
常用的魔术属性
1._ _class_ _:返回实例对象的数据类型(类类型)
2._ _dict_ _:对于类类型来说,保存的是属性与方法。对于实例对象来说,保存的是实例对象的属性
3._ _doc_ _:返回描述信息(注释)
2._ _call_ _:对call方法进行重写,可以使实例化对象像方法一样调用
3._ _getattr_ _(self,name):name表示属性名,访问不存在的属性会触发该函数的调用,实现属性的惰性初始化(仅需要的时候才定义相关属性)
4._ _getitem_ _(self,key):在类中定义了此方法后可直接调用实例化对象,并用[]来获取对象属性。key表示属性名或者索引
5._ _setitem_ _:使用[]来给对象赋值,使用方法与getitem相同
5.1可迭代对象与迭代器
什么是可迭代对象
在类中定义了_ _iter_ _方法,那么该类的实例对象就可以拿来迭代,类似字符串、元组这些。定义为可迭代对象后,需要定义_ _next_ _方法来确定迭代逻辑
iter方法是用来表明可迭代性质,next方法是用来实现迭代逻辑
定义迭代逻辑需要遵循两个原则:1.在next中放回下一项 2.无法再获取下一项时,必须抛出Sto'pIteration异常
6.1类装饰器与属性装饰器
类装饰器
核心在于_ _init_ _和_ _call_ _函数,init用来传递需要修饰的函数,call用来扩展函数的逻辑
同函数装饰器一样,也分带参装饰器与不带参装饰器
1.不带参数的类装饰器
2.带参数的类装饰器(_ _init_ _用来定义参数,_ _call_ _用来传递被修饰的函数,同时需要多定义一个闭包函数)
属性装饰器
在属性名前加上_ _双下划线,那么属性就变成私有的了。私有属性只能在类/对象作用域中访问(类似private的封装)
@property:对方法进行装饰,等同实现了get_xx方法
@func.setter:设置属性值,等同实现了set_xx方法
7.1 彻底掌握Python中的元类
type元类
使用元类可以动态的创建类。
语法:type(name,bases,dict) name表示类名(字符串),bases表示基类(父类),是一个元组类型。dict表示类的属性与函数,是一个字典。键名为属性名和函数名,键值为属性值与函数的具体实现
可以看出Kitty被定义成一个类对象,他的类名是Animal
Dog类继承了Animal类的对象Kitty(相当于继承了Animal),所以Dog可以调用父类的属性与方法
如果字典值传入的是方法,则需要先定义好方法的具体实现。假如是类方法、静态方法,则需要加上修饰符