本章学习链接如下:
Python 面向对象——2.类与对象实例属性补充解释,self的作用等
1.类的继承
类的继承是一种创建新类的方式,新类称为派生类(子类),继承自一个或多个基类(父类)。继承允许派生类(子类)获取基类(父类)的属性和方法,同时还可以定义自己的属性和方法。
(1)基本概念与操作
基类(父类):被继承的类。
派生类(子类):继承基类的类。
重写(Override):子类可以重写继承自父类的方法。
方法解析顺序(MRO):Python解释器用于查找对象属性和方法的顺序。
(2)基本语法
创建一个新类,在小括号里面写上父类的名称,调用父类的构造函数我们使用super().method(),子类可以继承父类的所有,因为他们本来就是包含关系,不如人按性别分分成男人和女人,那派生类男人肯定具有人的一切特征,除此之外,还有他的特殊特征:
class BaseClass:
# 父类的方法和属性
def method(self):
pass
class DerivedClass(BaseClass):
# 子类的方法和属性
def method(self):
super().method() # 调用父类的方法
# 子类特有的实现
比如调用父类的构造函数我们可以写成:
# 定义基类 Vehicle
class Vehicle:
def __init__(self, brand):
self.brand = brand
def start_engine(self):
print(f"The {self.brand} engine has started.")
# 定义派生类 Car,继承自 Vehicle
class Car(Vehicle):
def __init__(self, brand, model):
super().__init__(brand) # 调用父类的构造器
self.model = model#子类自己新建的实例属性
(3)代码示例
假设我们有一个名为 Vehicle
的基类,它代表一个交通工具,然后我们创建两个派生类 Car
和 Bicycle
,分别代表汽车和自行车。
Vehicle
是基类,定义了所有交通工具共有的属性和方法。Car
和Bicycle
是派生自Vehicle
的子类,它们继承了Vehicle
的属性和方法,但也定义了自己的构造器和start_engine
方法。- 使用
super().__init__(brand)
来调用基类的构造器,确保子类实例能够正确地初始化继承的属性。 Car
类中的start_engine
方法首先执行自己的逻辑,然后使用super().start_engine()
调用基类的start_engine
方法。Bicycle
类中的start_engine
方法则完全不同,因为自行车没有引擎。
# 定义基类 Vehicle
class Vehicle:
def __init__(self, brand):
self.brand = brand
def start_engine(self):
print(f"The {self.brand} engine has started.")
# 定义派生类 Car,继承自 Vehicle
class Car(Vehicle):
def __init__(self, brand, model):
super().__init__(brand) # 调用父类的构造器
self.model = model
def start_engine(self):
# 可以在这里添加额外的逻辑
print(f"The {self.model} {self.brand} engine has started.")
# 调用父类的方法
super().start_engine()
# 定义另一个派生类 Bicycle,同样继承自 Vehicle
class Bicycle(Vehicle):
def __init__(self, brand):
super().__init__(brand)
def start_engine(self):
# 自行车没有引擎,所以这里的方法会有所不同
print(f"The {self.brand} bicycle is ready to pedal.")
# 创建对象
my_car = Car("Tesla", "Model 3")
my_bicycle = Bicycle("Trek")
# 调用方法
my_car.start_engine() # 输出: The Model 3 Tesla engine has started.
# The Tesla engine has started.
my_bicycle.start_engine() # 输出: The Trek bicycle is ready to pedal.