继承 #
继承允许子类获得父类的属性和方法。
一、基本继承 #
python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self): # 方法重写
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
dog = Dog("Buddy")
print(dog.name) # "Buddy"
print(dog.speak()) # "Woof!"
二、super()函数 #
python
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
class Dog(Animal):
def __init__(self, name, age, breed):
super().__init__(name, age) # 调用父类方法
self.breed = breed
def info(self):
return f"{self.name}, {self.age}, {self.breed}"
dog = Dog("Buddy", 3, "Golden Retriever")
三、多继承 #
python
class A:
def method(self):
return "A"
class B:
def method(self):
return "B"
class C(A, B): # 多继承
pass
c = C()
print(c.method()) # "A"(MRO决定)
# 查看方法解析顺序
print(C.__mro__) # (<class 'C'>, <class 'A'>, <class 'B'>, ...)
四、方法重写 #
python
class Shape:
def area(self):
return 0
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14159 * self.radius ** 2
五、抽象类 #
python
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
# animal = Animal() # 错误:不能实例化抽象类
dog = Dog()
print(dog.speak()) # "Woof!"
六、isinstance和issubclass #
python
class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True
print(issubclass(Dog, Animal)) # True
print(issubclass(Dog, object)) # True
七、总结 #
| 概念 | 说明 |
|---|---|
| 继承 | class Child(Parent): |
| super() | 调用父类方法 |
| 多继承 | class C(A, B): |
| MRO | 方法解析顺序 |
| 重写 | 子类覆盖父类方法 |
| 抽象类 | ABC, @abstractmethod |
最后更新:2026-03-16