跳至正文
View Categories

1 min read

主要内容 #

  • 类的继承
  • 继承的使用
  • 多继承的顺序
  • 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支持多继承,但到多个父类含有同名方法时,按照继承顺序后面的父类的同名方法会被覆盖

    习题 #