📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
继承是面向对象编程
的核心概念之一,它允许我们通过已有的类(父类)创建新的类(子类),从而实现代码的复用和扩展。在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%免费】