前言
此文仅为记录学习要点使用
继承
方式:class classname(superClass1,superClass2,...):
支持多重继承,但先继承的类方法会重写后继承的方法。换句话说,即后继承的类只会往子类增加变量和方法看,不会修改覆盖(从左往右)
重写/调用父类方法
1、调用
方式:super(childType,object).parentfunction(param)
super函数可以object在childType类型下直接父类,也就是说如果A->B->C->D,那么有实例d,调用A的方法就要super(B,d),通过获取B的直接父类来调用A的方法。覆盖与重写父类方法不会在这里生效
2、重写
通过相同的函数名和参数,重写父类的方法,覆盖隐藏父类的方法。当父类是由子类构造函数生成时,父类方法会被子类方法覆盖隐藏
2.1 特殊的方法重写
由于以__(‘_’2个)开头,__(‘_’2个)结尾的为系统基本操作函数,也就是说诸如:A.a,A.a=1等操作都是使用系统基本操作函数进行操作的,所以可以通过对这些系统基本操作函数进行重写,对这些基本操作进行重新定义。但是这样的做法很危险,因为重写这些基本操作函数很容易出问题。
def __getattribute__(self, name)
def __setattr__(self, name, value)
是.取值和=赋值的对应的基本操作函数
通过继承重写或者实现必须的基本操作函数,可以自定义序列类和映射类,并且可以通过这样的做法对类访问和操作进行拦截处理
属性操作
可以通过property(fget,fset,fdel,doc)来定义一个属性并定义其基本操作(查改删注)
fget获取的函数
fset设置的函数
fdel删除的函数
doc的属性注释
例子:size=property(getSize,setSize)
x.size<==>x.getSize()
x.size=A<==>x.setSize(A)
静态方法与类成员方法
静态方法与类成员方法最大的区别,类方法可以通过参数访问调用类成员变量,而静态方法无法访问类成员变量。
1 静态方法
方式:
@staticmethod
def staticfun():
code
通过@staticmethod进行修饰,表静态方法,其中不带self参数
静态方法可以继承,也可以重写
2 成员方法
方式:
@classmethod
def classfun(cls):
code
通过@classmethod进行修饰,表类成员方法,固定参数为cls,为调用该方法的实例类型,可以继承重写。也就是说如果是在父类中定义了类方法,修改子类的一个类变量。那么如果由父类调用的话,会动态在父类结构上新增一个类变量(基本数值类型)或者出现找不到目标(引用类型)。由子类继承成员方法调用才能正确执行。