首页 > 编程笔记

Python类继承的用法

所谓类的继承,就是新类继承旧类的属性与方法,这种行为称为派生子类(subclassing)。继承的新类称为派生类,被继承的旧类则称为基类。

当用户创建派生类后,就可以在派生类内新增或改写基类的任何方法。

Python 类继承的语法如下:
class <类名称> [(基类1,基类2, ...)]:
    ["文件字符串"]
<语句>
在 Python 中,一个派生类可以同时继承自多个基类,基类之间以逗号,隔开。

下面是一个基类 A 与一个基类 B:
class A:
    pass

class B:
    pass
下面是一个派生类 C 继承自一个基类 A:
class C(A):
    pass
下面是一个派生类 D 继承自两个基类 A 与 B:
class D(A, B):
    pass

1. 派生类的构造方法

下面是一个基类的定义:
class Student:
    def __init__(self, name, sex, phone):
        self.name = name
        self.sex = sex
        self.phone = phone
    def printData(self):
        print ("姓名: ", self.name)
        print ("性别: ", self.sex)
        print ("电话: ", self.phone)
这个基类 Student 有3个成员变量,即 name(姓名)、sex(性别)及 phone(电话),并且定义了两个函数。
下面创建一个 Student 类的派生类:
class Person(Student):
    def __init__(self, name, sex, phone):         #派生类的构造方法
        Student.__init__(self, name, sex, phone)  #调用基类的构造方法
派生类的构造方法必须调用基类的构造方法,并使用完整的基类名称。Student.__init__(self,name, sex, phone) 中的 self 参数用来告诉基类现在调用的是哪一个派生类。

下面创建一个派生类 Person 的实例变量,并且调用基类 Student 的函数 printData() 打印出数据。
x = Person("张小明", "女", "12345678")
x.printData()
输出结果如下:
姓名:  张小明
性别:  女
电话:  12345678

2. 名称空间的搜索顺序

当用户在类内编写函数时,要记得类函数名称空间的搜索顺序是:类的实例→类→基类。

下面定义三个类:A、B 和 C。B 继承自 A,C 继承自 B。A、B、C 三个类都有一个相同名称的函数——printName()。

【示例】创建 A、B、C 三个类的实例,并调用 printName() 函数。
class A:
    def __init__(self, name):
        self.name = name
    def printName(self):
        print ("这是类A的printName()函数, name = %s" % self.name)
class B(A):
    def __init__(self, name):
        A.__init__(self, name)
    def printName(self):
        print ("这是类B的printName()函数, name = %s" % self.name)
class C(B):
    def __init__(self, name):
        B.__init__(self, name)
    def printName(self):
        print ("这是类C的printName()函数, name = %s" % self.name)
  
print(A("王小玲").printName())
print(B("张一飞").printName())
print(C("刘天佑").printName())
输出结果如下:
这是类A的printName()函数, name = 王小玲
None
这是类B的printName()函数, name = 张一飞
None
这是类C的printName()函数, name = 刘天佑
None

示例中代码分析如下:

推荐阅读