Python中的继承基于在其他面向对象的语言(如Java,C ++等)中使用的相似思想。可以从现有类中派生一个新类,如下所示。
class BaseClass(object): pass class DerivedClass(BaseClass): pass
的BaseClass是已经存在的(父)类,且DerivedClass是新的(子)类继承(或子类)的属性BaseClass。 注意:从Python 2.2开始,所有类都隐式继承自object该类,该类是所有内置类型的基类。
我们Rectangle在下面的示例中定义一个父类,该父类隐式继承自object:
class Rectangle(): def __init__(self, w, h): self.w= w self.h= h def area(self): returnself.w* self.h def perimeter(self): return 2 * (self.w + self.h)
的Rectangle类可被用作用于定义基类Square类,作为一个正方形是矩形的一种特殊情况。
class Square(Rectangle): def __init__(self, s): # 调用父构造函数,w和h均为s super(Square, self).__init__(s, s) self.s= s
该Square课程将自动继承的所有属性Rectangle类和对象类。super()用于调用类的__init__()方法Rectangle,实际上是调用基类的任何重写方法。 注意:在Python 3中,super()不需要参数。
派生类对象可以访问和修改其基类的属性:
r.area() # 输出:12 r.perimeter() # 输出:14 s.area() # 输出4 s.perimeter() # 输出8
issubclass(DerivedClass, BaseClass):True如果DerivedClass是的子类,则返回BaseClass
isinstance(s, Class):True如果s是的实例Class或的任何派生类,则返回Class
# 子类检查 issubclass(Square, Rectangle) # 输出:真 # 实例化 r = Rectangle(3, 4) s = Square(2) isinstance(r, Rectangle) # 输出:真 isinstance(r, Square) # 输出:错误 # 矩形不是正方形 isinstance(s, Rectangle) # 输出:真 # 正方形是矩形 isinstance(s, Square) # 输出:真