python3继承
python3的继承语法:
class DerivedClassName(BaseClassName):
<statement-1> . . . <statement-N>
BaseClassName必须和DerivedClassName在同一个区域。如果基类在另一个模中,可以写成:
class DerivedClassName(modname.BaseClassName):
派生类的执行过程和基类类似。当类对象被建立时,基类先被使用。这用于解析属性索引:如果一个被请求的属性不在当前类中,那么会去搜索它的基类。如果类是由其它类派生而来的,这个过程被递归应用。
派生类的实例没有任何特殊权限:DerivedClassName()
创建一个类实例。方法的索引解析如下:相应的类属性被查找,沿着基类的派生链向下查找(the corresponding class attribute is searched, descending down the chain of base classes if necessary),如果产生了函数对象,方法索引也适用。
派生类可以重写它们的基类方法。因为当在同一个对象中调用其它方法时是没有特殊权限的,一个基类方法调用另一个定义在同一基类的方法,可能调用该类的派生类的重写方法。(从C++的角度看python的所有方法都是virtual
的)
派生类中重写的基类方法实际上不仅仅是替换基类方法,它还可以扩展基类方法的功能。这有一种直接调用基类方法的简单方式:仅仅调用BaseClassName.methodname(self,arguments)
。这有时对客户很有用。(注意:这仅对基类是在全局区域可见的时候可用)
python有两个内建函数用于继承:
- 使用isinstance()检查一个实例的类型:
isinstance(obj,int)
,如果obj.__class__是int或是其它类从int派生而来的,返回True. - 使用issubclass()检查一个类的继承:
issubclass(bool,int)
,因为bool是int的子类,所以返回True。但是issubclass(float, int)
返回False,因为float不是int的子类。