主要内容 #
1. 类的继承 #
类的继承经常用于创建与现有类功能相似的新类,
又或是新类只需要在现有类基础上添加一些成员(属性和方法),但又不想直接将现有类代码复制给新类。
也就是说,通过使用继承这种机制,可以轻松实现类的重复使用。
2. 继承的使用 #
实现继承的类称为子类,被继承的类称为父类(也可称为基类、超类)
子类继承父类时,只需在定义子类的时候,将父类(可以是多个)放在子类之后的圆括号里即可。语法格式如下:
class 类名(父类1, 父类2, ...): #类定义部分
注意:
1,如果该类没有显式指定继承自哪个类,则默认继承 object 类(object 类是 Python 中所有类的父类,即要么是直接父类,要么是间接父类)
所以以下两行定义类的方式是一样的:
class 类名(): #类定义部分
class 类名(object): #类定义部分
2,Python 的继承是多继承机制,即一个子类可以同时拥有多个直接父类。
以下代码演示了继承机制的用法:
class People(object): def say(self): print("我是一个人,名字是:",self.name) class Animal(object): def display(self): print("人也是高级动物") class Person(People, Animal): # 同时继承 People 和 Animal 类, 其同时拥有 name 属性、say() 和 display() 方法 pass Someone_1 = Person() Someone_1.name = "张三" #给实例对象赋值 Someone_1.say() Someone_1.display()
从结果看出,虽然 Person 类为空类,但由于其继承自 People 和 Animal 这 2 个类,因此实际上 Person 并不空。
它同时拥有这 2 个类所有的属性和方法。
3. 多继承的顺序 #
使用多继承经常需要面临的问题是,多个父类中包含同名的方法。
对于这种情况,Python 的处置措施是:
根据子类继承多个父类时这些父类的前后次序决定,
即排在前面(左边)父类中的类方法会覆盖排在后面(右边)父类中的同名类方法。
比如:
class People(object): def __init__(self): self.name = 'People' def say(self): print("People类",self.name) class Animal(object): def __init__(self): self.name = 'Animal' def say(self): print("Animal类",self.name) class Person(People, Animal): #People中的 name 属性和 say() 会覆盖 Animal 类中的同名属性和方法 pass Someone_1 = Person() Someone_1.name = "张三" Someone_1.say()
从结果看出,当 Person 同时继承 People 类和 Animal 类时,People 类在前(左)。
因此如果 People 和 Animal 拥有同名的类方法,实际调用的是 People 类中的同名的类方法。
虽然 Python 在语法上支持多继承,但建议不要使用多继承。
4. 小结 #
- 类的继承经常用于创建与现有类功能相似的新类
- 继承使得子类可以完全继承且使用父类的属性和方法
- Python支持多继承,但到多个父类含有同名方法时,按照继承顺序后面的父类的同名方法会被覆盖
习题 #
- 无