Python 7天快速入门完整视频教程:https://www.bilibili.com/video/BV1o84y1Z7J1
类的继承
继承是面向对象的三大特征之一,也是实现软件复用的重要手段。Python 的继承是多继承机制,即一个子类可以同时有多个直接父类。 语法:
class 子类(父类1,父类2,...):
子类继承父类的属性和方法,同时子类可以扩展新的属性和方法。
我们来看一个实例:
# 定义一个水果类,作为父类
class Fruit:
# 父类属性 口感
taste = None
# 父类方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
# 定义香蕉子类,继承父类Food
class Banana(Fruit):
# 子类属性 颜色
color = None
def say_color(self):
print(f"香蕉颜色:{self.color}")
b1 = Banana()
b1.taste = "果肉芳香"
b1.say_taste()
b1.color = "黄色"
b1.say_color()
运行输出:
口感:果肉芳香
香蕉颜色:黄色
多继承实例:
# 定义一个水果类,作为父类
class Fruit:
# 父类属性 口感
taste = None
# 父类方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
class Food:
# 父类属性 价格
price = None
# 父类方法 打印价格
def say_price(self):
print(f"价格:{self.price}")
# 定义香蕉子类,继承父类Food
class Banana(Fruit, Food):
# 子类属性 颜色
color = None
def say_color(self):
print(f"香蕉颜色:{self.color}")
def __str__(self):
return f"口感:{self.taste},价格:{self.price},颜色:{self.color}"
b1 = Banana()
b1.taste = "果肉芳香"
b1.say_taste()
b1.color = "黄色"
b1.say_color()
b1.price = "10"
b1.say_price()
print(b1)
运行输出:
口感:果肉芳香
香蕉颜色:黄色
价格:10
口感:果肉芳香,价格:10,颜色:黄色
重写父类属性和方法
当子类根据业务需求,对父类方法不满意,我们可以在子类里重写父类方法,当然属性也可以重写。
# 定义一个水果类,作为父类
class Fruit:
# 父类属性 口感
taste = None
# 父类方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
class Food:
# 父类属性 价格
price = None
# 父类方法 打印价格
def say_price(self):
print(f"价格:{self.price}")
# 定义香蕉子类,继承父类Food
class Banana(Fruit, Food):
# 子类属性 颜色
color = None
# 重写父类属性
price = 9
def say_color(self):
print(f"香蕉颜色:{self.color}")
def __str__(self):
return f"口感:{self.taste},价格:{self.price},颜色:{self.color}"
# 重写父类方法 打印价格
def say_price(self):
print(f"香蕉价格:{self.price}")
b1 = Banana()
b1.taste = "果肉芳香"
b1.say_taste()
b1.color = "黄色"
b1.say_color()
print(b1.price)
b1.price = "10"
b1.say_price()
print(b1)
运行输出:
口感:果肉芳香
香蕉颜色:黄色
9
香蕉价格:10
口感:果肉芳香,价格:10,颜色:黄色
我们self调用的是子类继承下来的属性和方法。如果我们想调用父类的属性和方法,可以通过如下两种方式:
方式一:父类名.父类属性或者方法(self)
方式二:super().父类属性或者方法()
# 定义一个水果类,作为父类
class Fruit:
# 父类属性 口感
taste = None
# 父类方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
class Food:
# 父类属性 价格
price = 8
# 父类方法 打印价格
def say_price(self):
print(f"价格:{self.price}")
# 定义香蕉子类,继承父类Food
class Banana(Fruit, Food):
# 子类属性 颜色
color = None
# 重写父类属性
price = 9
def say_color(self):
print(f"香蕉颜色:{self.color}")
# 重写父类方法 打印价格
def say_price(self):
print(f"父类属性打印:{super().price},{Food.price}")
# 父类方法调用
super().say_price()
Food.say_price(self)
print(f"香蕉价格:{self.price}")
b1 = Banana()
b1.say_price()
运行效果:
父类属性打印:8,8
价格:9
价格:9
香蕉价格:9