首页天道酬勤python 继承 重写,多重继承python

python 继承 重写,多重继承python

admin 08-27 05:19 235次浏览
继承

在编写类时,并不是每次都要从空白开始。当要编写的类和另一个已经存在的类之间存在一定的继承关系时,就可以通过继承来达到代码重用的目的,提高开发效率。

class one():"""类的帮助信息"""# 类的说明Code# 类体class two(one):"""类的帮助信息"""# 类的说明Code# 类体

示例代码1:

class Demo: @property def print_value(self): return 1class Demo2(Demo): # 将Demo传入Demo2,让Demo2继承Demo的功能(可以使用Demo的功能) @property def print_value2(self): return 2value = Demo2()print(value.print_value) # 可以看到继承了Demo后我们就可以直接访问到Demo中的属性了执行结果:1

示例代码2:

class Fruit: color = '绿色' def harvest(self, color): print(f"水果是:{color}的!") print("水果已经收获...") print(f"水果原来是{Fruit.color}的!")class Apple(Fruit): color = "红色" def __init__(self): print("我是苹果")class Orange(Fruit): color = "橙色" def __init__(self): print("\n我是橘子")apple = Apple() # 实例化Apple()类apple.harvest(apple.color) # 在Apple()中调用harvest方法,并将Apple()的color变量传入orange = Orange()orange.harvest(orange.color) # 在Orange()中调用harvest方法,并将Orange()的color变量传入执行结果:我是苹果水果是:红色的!水果已经收获...水果原来是绿色的!我是橘子水果是:橙色的!水果已经收获...水果原来是绿色的! 方法重写

基类(被继承的类)的成员都会被派生类(继承的新类)继承,当基类中的某个方法不完全适用于派生类时,就需要在派生类中重写父类的这个方法。

如上面的示例代码2,基类中定义的harvest()方法,无论派生类是什么水果都显示"水果…",如果想要针对不同水果给出不同的提示,可以在派生类中重写harvest()方法。例如,在创建派生类Orange()时,重写harvest()方法如下:

class Fruit: color = '绿色' def harvest(self, color): print(f"水果是:{color}的!") print("水果已经收获...") print(f"水果原来是{Fruit.color}的!")class Apple(Fruit): color = "红色" def __init__(self): print("我是苹果")class Orange(Fruit): color = "橙色" def __init__(self): print("\n我是橘子") def harvest(self, color): # 重写harvest print(f"橘子是:{color}的!") print("橘子已经收获...") print(f"橘子原来是{Fruit.color}的!")apple = Apple() # 实例化Apple()类apple.harvest(apple.color) # 在Apple()中调用harvest方法,并将Apple()的color变量传入orange = Orange()orange.harvest(orange.color) # 在Orange()中调用harvest方法,并将Orange()的color变量传入执行结果:我是苹果水果是:红色的!水果已经收获...水果原来是绿色的!我是橘子橘子是:橙色的!橘子已经收获...橘子原来是绿色的!

注意:如本类中和父类同时存在这个方法名称,将只会执行本类中的这个方法,不会调用父类的同名方法(包括__init__())

派生类中调用基类__init__()方法

在派生类中定义__init__()方法时,不会自动调用基类的__init__()方法,如下示例代码:

class Fruit: def __init__(self, color="绿色"): Fruit.color = color def harvest(self): print(f"水果原来是{Fruit.color}的!")class Apple(Fruit): def __init__(self): print("我是苹果")apple = Apple()apple.harvest()执行结果:我是苹果Traceback (most recent call last): File "D:/xuexi/python/Demo.py", line 51, in <module> apple.harvest() File "D:/xuexi/python/Demo.py", line 41, in harvest print(f"水果原来是{Fruit.color}的!")AttributeError: type object 'Fruit' has no attribute 'color'

可以看到如上调用出现报错了,要让派生类调用基类的__init__()方法进行必要的初始化,需要在派生类使用super函数调用基类的__init__()方法

super().__init__() #调用积累的__init__()方法(注意缩进)

示例代码:

class Fruit: # 定义水果类(基类) def __init__(self, color="绿色"): Fruit.color = color # 定义类属性 def harvest(self, color): print("水果是:" + color + "的!") # 输出的是形式参数color print("水果已经收获……") print("水果原来是:" + Fruit.color + "的!") # 输出的是类属性colorclass Apple(Fruit): # 定义苹果类(派生类) color = "红色" def __init__(self): print("我是苹果") super().__init__()class Aapodilla(Fruit): # 定义人参果类(派生类) def __init__(self, color): print("\n我是人参果") super().__init__(color) def harvest(self, color): # 重写harvest()方法的代码 print("人参果是:"+ color +"的!") # 输出的是形式参数color print("人参果已经收获……") print("人参果原来是:"+Fruit.color+"的!") # 输出的是类属性colorapple = Apple() # 创建类的实例(苹果)apple.harvest(apple.color) # 调用基类的harvest()方法sapodilla = Aapodilla("白色") # 创建类的实例(人参果)sapodilla.harvest("金黄色带紫色条纹") # 调用基类的harvest()方法执行结果:我是苹果水果是:红色的!水果已经收获……水果原来是:绿色的!我是人参果人参果是:金黄色带紫色条纹的!人参果已经收获……人参果原来是:白色的! 实践

示例代码1:

class Demo: """更换手机默认语言""" def __init__(self, language='英语'): Demo.language = language print(f"智能手机默认的语言为{Demo.language}")class Demo2(Demo): def __init__(self, language='中文'): super().__init__(language) print("开始变更语言...") def default(self, language): print(f"已将智能手机默认的语言设置为{language}")languages = Demo2()languages.default("中文")执行结果:智能手机默认的语言为中文开始变更语言...已将智能手机默认的语言设置为中文

示例代码2:

class Demo3: """输出每月销售额""" def __init__(self): self.January = ("商品编号:T0001 商品名称:笔记本电脑",) # 使用元组是如果只有一个参数要加一个逗号,不然系统默认你括号中是一个普通字符串 self.February = ("商品编号:T0002 商品名称:华为荣耀", "商品编号:T0003 商品名称:iPad") self.March = () self.April = () self.May = () self.June = () self.July = () self.August = () self.September = () self.October = () def get(self, month=1): print(f"【{month}】月出售的商品有:") if month == 1: for i in self.January: print(i) elif month == 2: for i in self.February: print(i) """..."""num = int(input("请输要查询的月份:"))value = Demo3()value.get(num)执行结果:请输要查询的月份:2【2】月出售的商品有:商品编号:T0002 商品名称:华为荣耀商品编号:T0003 商品名称:iPad
导出默认的{fookubectl多集群管理【Java 框架学习】自学笔记(更新至 类与对象)Android动画之渐变动画(TweenAnimation)详解(渐变历史中提交的图片或压缩文件nginx配置https加密访问的详细教程
java中方法重写需要遵守的原则,java中什么是方法的重写 github有中文吗,github没有中文
相关内容