Python网络爬虫技术与实战
上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()方法。通过继承的方式,可以减少代码的重复编写。