在Python中,继承是一种面向对象编程的特性,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为基类或父类)的属性和方法。通过继承,子类可以重用基类的代码,并且可以添加或修改基类的行为。
继承的基本用法
class 基类:
def __init__(self):
self.value = "这是基类的属性"
def 基类的方法(self):
print("这是基类的方法")
class 子类(基类):
def __init__(self):
super().__init__() # 调用基类的初始化方法
self.子类的属性 = "这是子类的属性"
def 子类的方法(self):
super().基类的方法() # 调用基类的方法
print("这是子类的方法")
if __name__ == '__main__':
子类实例 = 子类()
子类实例.基类的方法()
子类实例.子类的方法()
使用super(),可以获取到基类,使用super().方法名,可以获取到用于调用父类(超类)的一个方法。
__init__
在子类的初始化方法__init__中,使用super().__init__()可以确保父类的初始化方法被调用,从而正确初始化父类的属性。Python不像Java调用构造函数的时候会自动调用父类的构造函数,所以经常在__init__里面要调用super().__init__()。
方法重写
子类可以定义与父类同名的方法来重写父类的方法。当子类的实例调用这个方法时,将执行子类中定义的方法,而不是父类中的方法。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound")
class Dog(Animal):
def speak(self):
print(f"{self.name} says bow-wow")
# 创建Dog类的实例
my_dog = Dog("Buddy")
my_dog.speak() # 输出: Buddy says bow-wow
在这个例子中,Dog 类继承了 Animal 类。Dog 类重写了 speak 方法,因此当调用 my_dog.speak() 时,会执行 Dog 类中的 speak 方法。
多重继承
Python支持多重继承,即一个子类可以继承多个基类。例如:
class A:
def featureA(self):
print("Feature A from class A")
class B:
def featureB(self):
print("Feature B from class B")
class C(A, B): # C继承自A和B
def featureC(self):
print("Feature C from class C")
c = C()
c.featureA()
c.featureB()
c.featureC()
输出:
Feature A from class A
Feature B from class B
Feature C from class C
在多重继承的情况下,Python使用C3线性化算法来决定方法的解析顺序,这保证了即使存在多个继承路径也能正确调用方法。例如,如果C同时从A和B继承了featureA方法,那么可以通过指定具体来源来调用(例如super(C, self).featureA())。但通常不需要手动指定,因为Python会自动处理这种冲突
Python继承机制详解
931

被折叠的 条评论
为什么被折叠?



