8.2 继承与重写
继承(inheritance)允许一个类获得另一个类的属性和方法。它适合表达“是一种”的关系,例如 Food 是一种 Product,Drink 也是一种 Product。
继承
父类(parent class)保存共性,子类(subclass)补充差异。
正在加载交互实验...
python
class Product:
def __init__(self, name, price):
self.__name = name
self.__price = price
def get_name(self):
return self.__name
def get_price(self):
return self.__price
class Food(Product):
def __init__(self, name, price, calories):
super().__init__(name, price)
self.__calories = calories
def get_calories(self):
return self.__calories
class Drink(Product):
def __init__(self, name, price, size):
super().__init__(name, price)
self.__size = size
def get_size(self):
return self.__sizesuper().__init__(name, price) 会调用父类构造方法,先初始化产品共有的 name 和 price。
正在加载概念检查...
重写
当子类需要改变从父类继承来的行为时,可以重写(override)方法。最常见的例子是重写 __str__()。
正在加载交互实验...
python
class Product:
def __init__(self, name, price):
self.__name = name
self.__price = price
def __str__(self):
return "%s (%.2f元)" % (self.__name, self.__price)
class Food(Product):
def __init__(self, name, price, calories):
super().__init__(name, price)
self.__calories = calories
def __str__(self):
return "食物:%s,%d 千卡" % (super().__str__(), self.__calories)
food = Food("芝士汉堡", 35.8, 302)
print(food)运行结果:
text
食物:芝士汉堡 (35.80元),302 千卡子类的 __str__() 可以调用 super().__str__() 复用父类已经写好的字符串格式。
正在加载概念检查...
重写时复用父类逻辑
重写并不代表完全丢掉父类代码。很多时候,子类只想在父类结果前后补充信息,所以会在重写方法里调用 super()。
python
def __str__(self):
return "食物:%s,%d 千卡" % (super().__str__(), self.__calories)正在加载概念检查...
正在加载本节练习...