class Animal:
def __init__(self, name):
self.name = name
def sound(self):
print("动物发出声音")
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # 调用父类的构造函数,初始化name属性
self.breed = breed
def sound(self):
super().sound() # 调用父类的sound方法
print("汪汪汪!")
dog = Dog("旺财", "拉布拉多")
print(dog.name) # 输出:旺财
print(dog.breed) # 输出:拉布拉多
dog.sound() # 输出:动物发出声音 \n 汪汪汪!
在上述示例中,Animal
是父类,Dog
是子类。子类Dog
继承了父类Animal
的构造函数和方法。
在子类Dog
的构造函数中,我们使用super().__init__(name)
来调用父类的构造函数,以初始化父类的属性name
。同时,子类Dog
新增了一个属性breed
表示狗的品种。
在子类Dog
中,我们重写了父类的方法sound
。在重写的方法中,我们首先通过super().sound()
调用父类的sound
方法,以保留父类方法的原有行为,然后在子类的方法中添加了额外的打印语句。
创建子类对象dog
时,会调用子类的构造函数,并自动调用父类的构造函数,初始化name
属性和breed
属性。
输出结果中,我们可以看到dog.name
输出了父类的属性值旺财
,dog.breed
输出了子类新增的属性值拉布拉多
。当调用dog.sound()
时,会先调用父类的sound
方法输出动物发出声音
,然后在子类的方法中输出汪汪汪!
。
通过这个例子,我们可以清晰地看到在子类中如何使用super().__init__()
调用父类的构造函数,并在子类中扩展父类的属性和方法。这样可以实现对父类行为的修改或扩展,同时保留了父类的功能。