Python编程二十八: 面向对象:类中的继承概念应用

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


继承是面向对象编程

的核心概念之一,它允许我们通过已有的类(父类)创建新的类(子类),从而实现代码的复用和扩展。在Python中,继承机制非常灵活,支持单继承和多继承。今天,我们就通过具体的代码示例,深入探讨类继承的概念及其应用场景。

目录

继承的基础

方法重写与多态

使用

继承的高级应用

总结与建议‍

继承的基础

场景一:定义父类和子类

通过继承,子类可以继承父类的属性和方法。

# 示例1:定义父类和子类

class Animal:

    def __init__(self, name):

        self.name = name

    def speak(self):

        returnf"{self.name} 发出声音"

class Dog(Animal):

    def speak(self):

        returnf"{self.name} 汪汪叫"

dog = Dog("旺财")

print(dog.speak())  # 输出:旺财 汪汪叫

适用场景:当多个类有共同的属性和方法时,可以通过继承复用代码。

方法重写与多态

场景二:方法重写

子类可以通过重写父类的方法来实现不同的行为。

# 示例2:方法重写

class Animal:

    def speak(self):

        return"动物发出声音"

class Cat(Animal):

    def speak(self):

        return"喵喵叫"

cat = Cat()

print(cat.speak())  # 输出:喵喵叫

适用场景:当子类需要实现与父类不同的行为时,可以重写父类的方法。

场景三:多态的应用

多态允许我们通过同一个接口调用不同子类的方法。

# 示例3:多态的应用

def animal_sound(animal):

    print(animal.speak())

my_dog = Dog("旺财")

my_cat = Cat()

animal_sound(my_dog)  # 输出:旺财 汪汪叫

animal_sound(my_cat)  # 输出:喵喵叫

适用场景:多态使得代码更加灵活,可以处理不同类型的对象。

使用super()调用父类方法

场景四:在子类中调用父类的构造函数

通过super()可以调用父类的方法。

# 示例4:调用父类的构造函数

class Animal:

    def __init__(self, name):

        self.name = name

class Dog(Animal):

    def __init__(self, name, breed):

        super().__init__(name)  # 调用父类的构造函数

        self.breed = breed

dog = Dog("旺财", "哈士奇")

print(dog.name)  # 输出:旺财

print(dog.breed)  # 输出:哈士奇

适用场景:当子类需要初始化父类的属性时,可以使用super()。

继承的高级应用

场景五:多重继承

Python支持多重继承,子类可以继承多个父类。

# 示例5:多重继承

class A:

    def process(self):

        print("处理来自A")

class B(A):

    def process(self):

        print("处理来自B")

        super().process()

class C(A):

    def process(self):

        print("处理来自C")

        super().process()

class D(B, C):

    def process(self):

        print("处理来自D")

        super().process()

d = D()

d.process()  # 输出:处理来自D -> 处理来自B -> 处理来自C -> 处理来自A

适用场景:当需要从多个父类继承功能时,可以使用多重继承。

场景六:实现单例模式

通过继承可以实现单例模式,确保类只有一个实例。

# 示例6:实现单例模式

class Singleton:

    _instance = None

    def __new__(cls):

        if cls._instance isNone:

            cls._instance = super().__new__(cls)

        return cls._instance

singleton1 = Singleton()

singleton2 = Singleton()

print(singleton1 is singleton2)  # 输出:True

适用场景:当需要确保类只有一个实例时,可以使用单例模式。

场景七:实现工厂模式

通过继承可以实现工厂模式,根据条件创建不同类型的实例。

# 示例7:实现工厂模式

class Animal:

    types = {"dog": "狗", "cat": "猫"}

    @classmethod

    def create(cls, animal_type):

        if animal_type in cls.types:

            return cls(cls.types[animal_type])

        else:

            raise ValueError("未知的动物类型")

    def __init__(self, name):

        self.name = name

dog = Animal.create("dog")

print(dog.name)  # 输出:狗

适用场景:当需要根据条件创建不同类型的实例时,可以使用工厂模式。

场景八:继承中的类属性

类属性可以被子类继承和共享。

# 示例8:继承中的类属性

class Animal:

    species = "哺乳动物"

class Dog(Animal):

    pass

dog = Dog()

print(dog.species)  # 输出:哺乳动物

适用场景:当需要在多个类之间共享属性时,可以使用类属性。

场景九:使用issubclass和isinstance检查继承关系

Python提供了issubclass和isinstance用于检查继承关系。

# 示例9:检查继承关系

print(issubclass(Dog, Animal))  # 输出:True

print(isinstance(dog, Animal))  # 输出:True

适用场景:当需要检查类之间的继承关系时,可以使用issubclass和isinstance。

场景十:继承中的方法解析顺序(MRO)

Python通过MRO(方法解析顺序)来确定方法的调用顺序。

# 示例10:方法解析顺序

class A:

    def process(self):

        print("处理来自A")

class B(A):

    def process(self):

        print("处理来自B")

        super().process()

class C(A):

    def process(self):

        print("处理来自C")

        super().process()

class D(B, C):

    def process(self):

        print("处理来自D")

        super().process()

d = D()

d.process()  # 输出:处理来自D -> 处理来自B -> 处理来自C -> 处理来自A

print(D.mro())  # 输出:[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

适用场景:当使用多重继承时,可以通过MRO理解方法的调用顺序。

总结与建议

通过以上10个代码示例,我们深入探讨了类继承的概念及其应用场景。继承是面向对象编程中的强大工具,合理使用继承可以提高代码的可复用性和扩展性。以下是几点总结与建议:

继承的基础:子类可以继承父类的属性和方法,避免重复代码。

方法重写与多态:子类可以通过重写父类的方法实现多态,使代码更加灵活。

使用super():通过super()可以调用父类的方法,确保父类的逻辑被正确执行。

继承的高级应用:多重继承、单例模式、工厂模式等都是继承的高级应用,可以根据具体需求选择使用。

注意MRO:在多重继承中,理解MRO可以帮助我们更好地理解方法的调用顺序。

继承是面向对象编程的核心机制之一,掌握它不仅能让你的代码更加模块化,还能帮助你实现更复杂的逻辑。希望这篇文章能为你提供清晰的学习路径,如果你还有其他问题,欢迎留言交流!

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​​
在这里插入图片描述​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值