079、类的继承

2024-07-07 1682阅读

继承是对已有的类进行扩展创建出新的类,这个过程就叫做继承。其中,提供继承信息的类叫做父类(超类、基类),得到继承信息的类称为子类(派生类)。

079、类的继承
(图片来源网络,侵删)

基本语法

继承是通过在类定义语句中使用圆括号来指定父类(或基类)来实现的。

如:

class Person:  
    def __init__(self, name, age):  
        self.name = name  
        self.age = age  
  
    def introduce(self):  
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")  
  
class Student(Person):  
    def __init__(self, name, age, student_id):  
        # 调用父类的__init__方法  
        super().__init__(name, age)  
        # 添加子类特有的属性  
        self.student_id = student_id  
  
    def show_student_info(self):  
        print(f"Student Information:")  
        print(f"Name: {self.name}")  
        print(f"Age: {self.age}")  
        print(f"Student ID: {self.student_id}") 
        

如上,定义了简单的Person类,该类有两个基本属性:name(名字)和age(年龄),并且有一个introduce方法用于介绍自己。Student类使用圆括号来指定继承自Person类,并添加了一个额外的属性student_id(学生ID)和一个方法show_student_info用于显示学生的详细信息。

继承的特点

  1. 单继承与多继承:Python支持单继承和多继承。在定义类时,如果基类只有一个,则为单继承;如果基类有多个,则为多继承。多继承的语法是在类定义时,将多个基类放在圆括号中,用逗号分隔。如:

    class Vehicle:  
        """交通工具"""
        def __init__(self, make, model):  
            self.make = make  
            self.model = model  
      
        def start_engine(self):  
            print(f"Starting the engine of the {self.make} {self.model}...")  
      
    class ElectronicDevice:  
        """电子设备"""
        def __init__(self, battery_life):  
            self.battery_life = battery_life  
      
        def check_battery(self):  
            print(f"Battery life is {self.battery_life}%.")  
      
    # Car类同时继承自Vehicle和ElectronicDevice  
    class Car(Vehicle, ElectronicDevice):
        """汽车"""
        def __init__(self, make, model, battery_life):  
            # 调用Vehicle的__init__  
            Vehicle.__init__(self, make, model)  
            # 调用ElectronicDevice的__init__  
            ElectronicDevice.__init__(self, battery_life)  
    

    在实际编程中,如果不是必须使用多重继承,就尽量使用单一继承,假如非要使用多重继承,也要尽量避免出现菱形继承(如一个类继承两个父类,但是这两个父类又继承同一个父类),否则代码可读性和可理解性将变得非常糟糕。

  2. 方法重写(Override):子类可以定义与父类同名的方法,这种方法被称为方法重写。当子类对象调用这个方法时,会执行子类定义的方法,而不是父类中的方法。如:

    # 定义父类Animal  
    class Animal:  
        def __init__(self, name):  
            self.name = name  
      
        # 父类中的speak方法  
        def speak(self):  
            print(f"{self.name} makes a sound.")  
      
    # 定义子类Dog,继承自Animal  
    class Dog(Animal):  
        # 重写父类中的speak方法  
        def speak(self):        
            print(f"{self.name} says Woof!")  
      
    # 使用
    my_dog = Dog("Buddy")  
    my_dog.speak()  # 输出: Buddy says Woof!
    
  3. super()函数:super()函数是用于调用父类(超类)的一个方法。super()在子类的方法中调用父类的方法时非常有用。如在上面重写的方法中,我们可以通过super()来调用父类方法。

    class Dog(Animal):  
        # 重写父类中的speak方法  
        def speak(self):  
            # 调用父类的speak方法
            super().speak()  
            # 重写  
            print(f"{self.name} says Woof!")  
      
    # 使用
    my_dog = Dog("Buddy")  
    my_dog.speak()  # 输出: Buddy makes a sound. Buddy says Woof!
    
  4. 继承的传递性:如果类C继承自类B,类B又继承自类A,那么类C同时继承了类B和类A的属性和方法。这称为继承的传递性。

总结:

继承是一种is-a的关系,如有一个父类:Person,然后3个子类:student、teacher、programmer。它们的关系是:

a student is a person.

a teacher is a person.

a programmer is a person.

子类直接从父类继承公共的属性和行为,再添加自己特有的属性和行为,所以子类一定是比父类更强大的,任何时候都可以使用子类对象去代替父类对象。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]