Python3.2官方文档翻译--继承
6.5 继承
当然,一门语言特性如果不支持继承那么名称类就失去了价值。子类继承父类的方法如下:
class DerivedClassName(BaseClassName):
<statement-1>
.
.
.
<statement-N>
名称BaseClassName必须定义在一个包含派生类定义的作用域中。在基类名称的位置上,其他随意表达式都是允许的、例如,当基类定义在其他模块中,这也是可用的。
class DerivedClassName(modname.BaseClassName):
派生类的执行过程和父类执行过程是相同的。当类对象构造好后,基类就被记住了。这为了解决属性引用问题:如果一个请求的属性在类中没有发现,程序就会搜素它的基类。如果基类它本身也是从其他类派生而来,那么就系继续搜素。
对派生类的实例化没有特别之处。DeriverdClassName()创建了一个类的新实例。方法引用按照如下使用:对应的类属性可以被搜索的,如果需要就会继续在基类中查询。如果这指向函数对象,则方法引用是合法的。
派生类可以重写基类的方法。因为当调用同对象的其他方法时候,方法没有特殊的权限。调用定义在同一基类的该基类方法可能终止派生类方法的覆盖。(对于C++程序员来说,在python中所有的方法都是有效虚拟的)
在派生类中一个重写方法事实上想扩展方法,而不是简单的代替同名的基类方法。最简单直接调用基类的方法就是用: BaseClassName.methodname(self, arguments)。这个对客户也非常有空。(注意,如果基类在全局作用域中和BaseClassName都可以访问, 这种方法才有效)
Python有两种实现继承的内置函数:
方法一: 用isinstance()方法来检查实例类型:只有obj._class_is 是整型或者其他从int继承的类,isinstance(obj, int)才会返回真。
方法二: 用issubclass()方法来检查类继承:issubclass(bool, int)结果是真得,因为bool是int的一个子类。但是issubclass(float, int)是假的因为float不是int的子类。