python继承类重写方法,python不支持多重继承
当你写一个类来继承的时候,你不需要总是从一个空格开始。当要编写的类与另一个已有的类存在一定的继承关系时,可以通过继承达到代码重用的目的,提高开发效率。
Class():类的帮助信息 #类代码描述#类体类二(一):类的帮助信息 #类代码描述#类体示例代码1:
class demo:@ propertydefprint _ value(self):return 1 class Demo2(Demo):#将Demo传入demo2,让Demo 2继承Demo的函数(可以使用Demo的函数)@ propertydefprint _ value 2(self):return 2 value=Demo 2()print(value。print _ value) #我们可以看到继承demo后可以直接访问Demo中的属性。执行结果:1示例代码2:
class Fruit:color= green def harvest(self,color): print(f fruit is: {color}的!)打印(‘果实已经收获.)打印(f 水果原创自{Fruit.color}!)类apple(Fruit):color= red def _ _ init _ _(self):print(我是苹果 )类orange(Fruit):color= Orange def _ _ init _(self):print( N我是橘子)Apple=Apple() #实例化Apple()类apple.harvest(apple.color) #调用Apple()中的harvest方法,将Apple()的颜色变量传入Orange=Orange()Orange . harvest(Orange . color)#调用Orange()中的harvest方法,将Orange()的颜色变量传入执行结果:我是苹果果:水果已经收获了.水果竟然是绿色的!我是橘子,水果是橘子!水果已经收获了.水果竟然是绿色的!当一个方法重写基类(继承类)的成员时,它将被派生类(继承的新类)继承。当基类中的方法不完全适用于派生类时,有必要在派生类中重写父类的此方法。
如上面的示例代码2所示,基类中定义的harvest()方法显示 fruit …,而不考虑派生类的水果。如果想对不同的水果给出不同的提示,可以在派生类中重写harvest()方法。例如,当创建派生类Orange()时,重写harvest()方法,如下所示:
class Fruit:color= green def harvest(self,color): print(f fruit is: {color}的!)打印(‘果实已经收获.)打印(f 水果原创自{Fruit.color}!)类苹果(水果):color= red def _ _ init _ _(self):print(我是苹果 )类橙子(水果):color= Orange def _ _ init _ _(self):print( nI是橙子)def harvest (self ) print(橙子已经收割了.)打印(f orange原创自{Fruit.color}!)Apple=Apple() #实例化Apple()类apple.harvest(apple.color) #调用Apple()中的harvest方法,将Apple()的颜色变量传入Orange=Orange()Orange . harvest(Orange . color)#调用Orange()中的harvest方法,将Orange()的颜色变量传入执行结果:我是苹果果:红色!水果已经收获了.水果竟然是绿色的!我是橙色的。橙色就是:橙色!橘子已经收割了.橘子是绿色的!注意:如果这个方法名同时存在于这个类和父类中,那么只会执行这个类中的这个方法,不会调用父类的同名方法(包括__init__())。
在派生类中调用基类的__init__()方法在派生类中定义__init_()方法时,不会自动调用基类的_ _ init _()方法,如下面的示例代码所示:
Classfruit: def _ _ init _ _ (self,color= green ):fruit . color=color def harvest(self):print(F fruit是{Fruit.color}的!)class Apple(fruit):def _ _ init _ _(self):print(我是苹果)apple=Apple()apple.harvest()执行结果:我是苹果回溯(最近一次调用last):file d:/习雪/python/Demo.py ,第51行,在模块Apple . harvest()file d:/习雪/python/demo.py ,第41行,在harvest print (F fruit最初来自{Fruit.color}!)attribute error:type object“fruit”没有属性“color”您可以看到上面的调用给出了一个错误。要让派生类调用基类的__init__()方法进行必要的初始化,需要在派生类中用超级函数调用基类的__init_()方法。
超级()。__init__() #调用累积__init__()方法(注意缩进)示例代码:
类Fruit: #定义水果类(基类)def __init__(self,color= green ):Fruit . color=color #定义类属性def harvest(self,color): print (fruit is: color !)#输出是形参color print(果实已收获……) print(果实原属: Fruit.color !)#输出的是类属性colorclass Apple(Fruit): #定义Apple类(派生类)color= red def _ _ init _ _(self):print(我是苹果)super()。_ _ init _ _()class aapodilla(fruit):#定义人参果类(派生类)def _ _ init _ _ (self,color): print (\ nI am人参果)super()。_ _ init _ _ (color) def harvest (self,color): #覆盖harvest()方法的代码print(人参果是: color )#输出是形参color print(人参果已收割……) print(人参果是: Fruit.color !)#输出是类属性colorapple=Apple() #创建类的实例(Apple)Apple . harvest(Apple . color)#调用基类sapodilla=Aapodilla (white) #创建类的实例(人参果)sapodilla.harvest(金黄色带紫色条纹)#调用基类的水果已被收获.果实竟然是:绿色!我是人参果。人参果是:金黄色带紫色条纹!人参果已经收获了.人参果竟然是:白!示例代码1:
Class Demo: 更改手机默认语言 def __init__(self,Language= English ):Demo . Language=Language print(f 智能手机默认语言为{ Demo . Language } )Class Demo 2(Demo):def _ _ init _ _(self,Language= Chinese): super()。_ _ init _ _(语言)打印(开始更改语言.)def default(self,Language): print(f 已将智能手机默认语言设置为{ Language } )languages=demo 2()languages . default(中文)执行结果:智能手机默认语言为中文.智能手机的默认语言已设置为中文。示例代码2:
class demo 3: Output monthly sales def _ _ init _ _(self):self . January=(商品编号:T0001商品名称:laptop ,)# Use tuple is如果只有一个参数加逗号,否则系统会默认你的括号是一个普通的字符串self。二月=(商品号。T0002商品名称:华为荣耀,商品编号:T0003商品名称:ipad )self . March=()self . April=()self . may=()self . June=()self . July=()self . August=()self . September=()self .December=()def get(self,Month=1): print (f [{month}]当月销售的商品为:)如果month==1: for I in self。January:print(I)elif month==2:for I in self二月:打印(一)“.”num=int(input(请输入要查询的月份:))value=Demo3()value.get(num)执行结果:请输入要查询的月份:2 [2]当月销售的商品有:商品编号:T0002商品名称:华为荣耀商品编号:T0003。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。