python3继承

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),因为boolint的子类,所以返回True。但是issubclass(float, int)返回False,因为float不是int的子类。

发表回复