
上QQ阅读APP看书,第一时间看更新
1.9.3 继承性
程序中的继承是描述事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承自狗,如图1-41所示。子类可以继承父类的公共属性和公共方法,父类中私有的属性和方法不能被继承。
图1-41 继承示例图
继承是面向对象的重要特性之一。通过继承可以创建新类,目的是使用或修改现有类的行为。原始的类称为父类或超类,新类称为子类或派生类。继承可以实现代码的重用。Python在类名后使用一对括号表示继承的关系,括号中的类即为父类。如果父类定义了__init__方法,那么子类必须显示调用父类的__init__方法。如果子类需要扩展父类的行为,那么可以添加__init__方法的参数。下面这段代码演示了继承的实现。
# -*- coding:utf-8 -*- # 类的创建 class Fruit(object): def __init__(self, color): # __init__为类的构造函数 self.color = color # 实例属性 print "Fruit's color = %s " % (self.color,) def grow(self): print "Fruit grow()" class Apple(Fruit): # 继承自Fruit类 def __init__(self, color, name): # 子类的构造函数 Fruit.__init__(self, color) # 显式调用父类的构造函数 print "Apple's color = %s " % (self.color,) self.name = name # 新增属性 def sale(self): print "Apple sale()" # 改写父类中的grow方法 class Banana(Fruit): # 继承自Fruit类 def __init__(self, color): # 子类的构造函数 Fruit.__init__(self, color) # 显式调用父类的构造函数 def grow(self): # 新增方法 print "Banana grow()" if __name__ == '__main__': apple = Apple('red', 'apple') apple.grow() # 继承父类的grow方法,可以直接调用 apple.sale() banana = Banana('yellow') banana.grow()
上述代码中的Apple类通过继承Fruit类而自动拥有了color属性和grow()方法。通过继承的方式,可以减少代码的重复编写。