python面向对象继承_四. python面向对象(继承)

一. 继承

class A:pass #父类 基类 超类

class B:pass #父类 基类 超类

class A_son(A,B): pass #子类 派生类

class AB_son(A):pass #子类 派生类#一个类 可以被多个类继承#一个类可以继承多个父类

print(A_son.__bases__) #查看类的继承__bases__ (, )

print(AB_son.__bases__) #查看类的继承__bases__ (,)

print(A.__bases__) #查看类的继承__bases__ 在python 中没有父类 都是 object儿子 (,)

classPer(object):def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sexclassDog(Per):passaa=Dog("张三",25,"男")print(aa.age) #25

print(aa.name) #张三

classAa(object):def __init__(self, name,aggr,hp):

self.name=name

self.aggr=aggr

self.hp=hpdefeat(self):print("吃了啊哈哈哈1111111111111111111111111111111111哈")classDo(Aa):def __init__(self, name, aggr,hp,kind):

Aa.__init__(self,name,aggr,hp)

self.kind=kinddefeat(self):

Aa.eat(self)#去继承父类的吃的方法 意思是既想实现新的功能 也想使用父类原有的功能 还需要在子类中再调用

print("222222222222222222222222222222222222222lalalalallaal")

aa=Do("张三",100,22,5)print(aa.name) #张三

print(aa.kind) #5

print(aa.aggr) #100

print(aa.hp) #22

aa.eat()#父类方法 和子类方相同 同时调用了#吃了啊哈哈哈1111111111111111111111111111111111哈#222222222222222222222222222222222222222lalalalallaal

classAa(object):def __init__(self, name,aggr,hp):

self.name=name

self.aggr=aggr

self.hp=hpdefeat(self):print("吃了啊哈哈哈哈")classDo(Aa):def __init__(self, name, aggr,hp,kind,lover):

super().__init__(name, aggr,hp)

self.kind=kind #自己的属性叫派生属性

self.lover=loverdefeat(self):print("2222222222222222222222222")

aa=Do("张三",100,22,5,66666666666666)

aa.eat()#这个是调用自己的方法

print(aa.lover) #66666666666666

super(Do,aa).eat()#super 是可以掉用父类的方法 格式 是 super(被继承的类,实例化)

#这是爸爸类

classBaba(object):

money= 100

def __init__(self, name):print("爸爸")

self.name=namedefda_ren(self):print("%s正在打儿子" %self.name)#儿子类

classSon(Baba):pass

print(Son.money) #100

print(Baba.__dict__)print(Son.__dict__)#{'__module__': '__main__', 'money': 100, '__init__': , 'da_ren': , '__dict__': , '__weakref__': , '__doc__': None}#{'__module__': '__main__

#这是爸爸类

classBaba(object):

money=100

def __init__(self,name):

self.name=namedefda_ren(self):print("%s正在打儿子"%self.name)#儿子类

classSon(Baba):passa1=Son("张三")print(a1.name)print(a1.money)#爸爸#张三#100

classPerson(object):def __init__(self, name, gender):

self.name=name

self.gender=genderdefrun(self,aa):print("我喜欢%s是一个"%aa,self.gender)classTeacher(Person):def __init__(self, name, gender, course,age):

super(Teacher, self).__init__(name, gender)

self.course=course

self.age=agedefsuger(self,cc):print("我是"+self.name+"喜欢"+self.course+"年龄%s"%cc)defrun(self):print("我是子类哈哈哈哈")

t= Teacher('张三', '男', 'English',"22")print(t.name) #张三

print(t.course) #English

print(t.age) #22

t.run() #如果子类和父类定义的方法名相同时 默认时先调用子类

t.suger("222222")#使用super去调用父类方法

aa=super(Teacher,t)

aa.run("3333333333333")#张三#English#22#我是子类哈哈哈哈#我是张三喜欢English年龄222222#我喜欢3333333333333是一个 男

继承一个类:

如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承:classPerson(object):def __init__(self, name, gender):

self.name=name

self.gender=gender

定义Student类时,只需要把额外的属性加上,例如score:classStudent(Person):def __init__(self, name, gender, score):

super(Student, self).__init__(name, gender)

self.score=score

一定要用 super(Student, self).__init__(name, gender) 去初始化父类,否则,继承自 Person 的 Student 将没有 name 和 gender。

函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)。

classPerson(object):def __init__(self, name, gender):

self.name=name

self.gender=genderdefrun(self,aa):print("我喜欢%s是一个"%aa,self.gender)classTeacher(Person):def __init__(self, name, gender, course,age):

Person.__init__(self,name, gender)

self.course=course

self.age=agedefsuger(self,cc):print("我是"+self.name+"喜欢"+self.course+"年龄%s"%cc)defrun(self):print("我是子类哈哈哈哈")

t= Teacher('张三', '男', 'English',"22")print(t.name) #张三

print(t.course) #English

print(t.age) #22

t.run() #如果子类和父类定义的方法名相同时 默认时先调用子类

t.suger("222222")#使用super去调用父类方法

aa=super(Teacher,t)

aa.run("3333333333333")#张三#English#22#我是子类哈哈哈哈#我是张三喜欢English年龄222222#我喜欢3333333333333是一个 男

#温度temperature

#多态:就是运行时 绑定的状态

classH2o(object):def __init__(self,name,temperature):

self.name=name

self.temperature=temperaturedefturn_ice(self):if self.temperature<0:print("[%s]温度太低结冰了"%self.name)elif self.temperature>0 and self.temperature<100:print("[%s]液化成水"%self.name)elif self.temperature>100:print("[%s]温度太高成水蒸气"%self.name)#水

classWater(H2o):pass

#固态

classIce(H2o):pass

#气态

classSteam(H2o):passa1=Water("水",60)

a2=Ice("冰",-100)

a3=Ice("蒸汽",1000000)#就是不同的对象调用相同的方法

deffunc(obj):

obj.turn_ice()

func(a1)#[水]液化成水

func(a2) #[冰]温度太低结冰了

func(a3) #[蒸汽]温度太高成水蒸气

#定义交通工具 地铁

#速度 speed#乘坐 lood#能源 power## 那条线路 line#定义交通工具

classVehicle:

Country="china"

def __init__(self, name,speed,load,power):

self.name=name

self.speed=speed

self.load=load

self.power=powerdefrun(self):print("地铁开动了1111111111111111111111111111111")#地铁

classSubway(Vehicle):def __init__(self,name,speed,load,power,line):

Vehicle.__init__(self,name,speed,load,power) #调用父类的方法实例

self.line=linedefshow_info(self):print(self.name,self.line,self.speed,self.load,self.power)defrun(self):print("%s %s开的了"%(self.name,self.line))

a=Vehicle("成都地铁","10m/s","500人","电")

a.run()#地铁开动了1111111111111111111111111111111

a=Subway("成都地铁","10m/s","500人","电","6号线")

a.show_info()#成都地铁 6号线 10m/s 500人 电

a.run()#成都地铁 6号线开的了

print(a.Country)#china

#定义交通工具 地铁

#速度 speed#乘坐 lood#能源 power## 那条线路 line

#定义交通工具

classVehicle:

Country="china"

def __init__(self, name,speed,load,power):

self.name=name

self.speed=speed

self.load=load

self.power=powerdefrun(self):print("地铁开动了1111111111111111111111111111111")#地铁

classSubway(Vehicle):def __init__(self,name,speed,load,power,line):

Vehicle.__init__(self,name,speed,load,power) #调用父类的方法实例

self.line=linedefshow_info(self):print(self.name,self.line,self.speed,self.load,self.power)defrun(self):

Vehicle.run(self)#调用父类的方法

print("%s %s开的了"%(self.name,self.line))

a=Subway("成都地铁","10m/s","500人","电","6号线")

a.show_info()#成都地铁 6号线 10m/s 500人 电

a.run()#成都地铁 6号线开的了

print(a.Country)#china

"""Vehicle.__init__(self,name,speed,load,power)

相当于调用父类的

def __init__(self, name,speed,load,power):

self.name=name

self.speed=speed

self.load=load

self.power=power"""

1. 多继承

类名.__mro__方法 查看广度优先的继承顺序

# 多继承:

# 按照名字顺序 继承

# 新式类 :广度优先 类名.mro方法 查看广度优先的继承顺序

# 经典类 : 深度优先

class A:

def func(self):

print("A")

class B:

def func(self):

print("B")

class C:

def func(self):

print("C")

class D(A,B,C):

def func(self):

print("D")

f=D()

f.func()

print(D.__mro__)

#

# (, , , , )

classA:deffunc(self):print("A")classB:deffunc(self):print("B")classC:deffunc(self):print("C")classD(A,B,C):deffunc(self):print("D")

f=D()

f.func()

super(D,f).func()

使用import 来继承(分文件来继承 注意在同一个文件夹下面)

#per.py 文件

classPer(object):def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sexdefeat(self):print("我是吃吃—————我是人类吃———————————>")defsu(self):print("我性别是男-----",self.sex)

#gril.py 文件

from per importPerclassGr(Per):def __init__(self,name,age,sex,money,like):

super().__init__(name,age,sex)

self.money=money

self.like=likedefeat(self):#Per.eat(self)

print("我是女子吃吃吃-=========1111111111111111====>")defo(self):print("这是钱",self.money)

# son.py 文件

from per importPerclassSo(Per):def __init__(self,name,age,sex,xi,wa,lan):

super().__init__(name,age,sex)

self.xi=xi

self.wa=wa

self.lan=landefp(self):print("我是帅哥了哈哈哈")deff(self,cc):print(self.lan,"---------------比较花钱",cc)

#mian.py 执行文件

from gril importGrfrom son importSoif __name__=="__main__":

aa=Gr("张三",25,"女","20000元","漂亮")

aa.su()#我性别是男----- 女

aa.eat() #我是女子吃吃吃-=========1111111111111111====>

aa.o() #这是钱 20000元

super(Gr,aa).eat() #我是吃吃—————我是人类吃———————————>

print("***********************************11111111111111111111*******************************************")

bb=So("李四",6666,"男","哈哈","222","nice to")

bb.su()#我性别是男----- 男

bb.eat()#我是吃吃—————我是人类吃———————————>

bb.p()#我是帅哥了哈哈哈

bb.f("去你妈的哈哈哈哈")#nice to ---------------比较花钱 去你妈的哈哈哈哈

例子 爸爸和妈妈方法       都让儿子继承

#Father.py

classFather(object):def __init__(self,money):

self.money=moneydefplay(self):print("这是paly哈哈哈哈哈哈哈哈")deffunc(self):print("这是func111111111111111111啦啦啦啦啦啦啦啦")

#Mother.py 文件

classMother(object):"""docstring for Father"""

def __init__(self,faceValue):

self.faceValue=faceValuedefeat(self):print("我要吃哈哈哈哈eat")deffunc(self):print("这事了绿绿绿绿func")

Child.py 文件#多继承 这个Child 即继承了父类 和母类

from Father importFatherfrom Mother importMotherclassChild(Father,Mother):def __init__(self,money,faceValue):

Father.__init__(self,money)

Mother.__init__(self,faceValue)

#mian.py 执行文件

from Child importChilddefmain ():

c=Child(300,100)print(c.money,c.faceValue)

c.piay()

c.eat()#注意:父类中方法名相同 默认调用的是在括号中排前面的父类中方法

c.func()if __name__=="__main__":

main()

#a.py 文件

classAa (object):

name="张三"age=0def __init__(self,lover,la):

self.lover=lover

self.la=ladefaa(self):print("11")print(self.la)defbb(self):print("22")print(self.lover)

#b.py文件

classBa(object):defcc(self):print("33")defdd(self):print("44")

mian.py 执行文件from a importAafrom b importBa#方法一

classCc(Aa,Ba):def __init__(self,lover,la,idi):

super(Cc,self).__init__(lover,la)

self.idi=ididefgg(self):print(self.idi)

f=Cc("66666","888888",7)

f.aa()

f.bb()

f.gg()#方法二

classCc(Aa,Ba):def __init__(self,lover,la,hh):

self.__hh=hh

Aa.__init__(self,lover,la)

Ba.__init__(self)defjj(self):print(self.__hh)

f=Cc("66666","888888",99999)

f.aa()

f.bb()

f.jj()print(Cc.name)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在真实工作中的编程是怎么样的,与学校里有什么不同?

学校里每门编程语言课程都是上一点上不完的&#xff0c;实验课写的代码最长一两百行。 而在真实的工作环境中&#xff0c;程序员写代码是怎么样的&#xff1f;每天要啪啪啪手敲成千上万行代码嘛&#xff1f;和在学校学习时写代码有什么异同呢&#xff1f;/*说说我的经验*/刚进公…

聊一聊Docker与时区

前言 当我们把应用部署到容器里面之后&#xff0c;基本都会要和时间/时区打交道&#xff01;&#xff01;大部分的应用&#xff0c;多多少少都会有获取当前时间的操作&#xff0c;试想一下应用拿到的时间不对&#xff0c;那么业务极有可能会乱套&#xff0c;造成严重的损失。时…

百度竟然不是中国的

2019独角兽企业重金招聘Python工程师标准>>> 身份之谜—百度是中国公司吗&#xff1f; 虽然&#xff0c;Baidu在美国上市使用了“中国的Google”这么一个概念&#xff0c;说真的&#xff0c;我知道的Baidu和Google最大的共同点也许就是他们都是美资公司。Baidu公司…

tortoisegit图标消失_安装TortoiseGit 状态图标不能正常显示

如果你安装 TortoiseSVN 之后&#xff0c;功能使用正常&#xff0c;但是文件夹或文件左上角就是不显示图标&#xff0c;那么你可能1. 64bit 系统上装了 32bit 的 TortoiseSVN解决方法是&#xff0c;再安装 64bit 的 TortoiseSVN&#xff0c;两者可并行运行2. Windows Explorer …

好用的验证框架FluentValidation(上)

把数据错误扼杀在早期&#xff0c;那就是在数据的入口处&#xff0c;一般数据都是打包成一个实体的方式进传递&#xff0c;FluentValidation就以实体类为单位进行属性验证的集合。Install-Package FluentValidation下面看一个例子吧。实体类&#xff1a;public class Person {p…

4.WCF事务【Transaction】

契约&#xff1a; namespaceRhythmk.Contracts{ [ServiceContract(Namespace"http://wwww.wangkun.com")]publicinterfaceICalculate { [OperationContract] [TransactionFlow(TransactionFlowOption.Mandatory)]voidOperationTransaction(inti);/*TransactionFlow -…

10G 职场晋升/IT干货/生活技能/理财秘籍 【全套】学习资料免费送!

你的同龄人正在抛弃你&#xff0c;大学毕业后五年&#xff0c;你就会发现&#xff0c;同龄人之间的差距已经是云泥之别。当年一起追剧&#xff0c;一起逃课&#xff0c;一起吹牛的同学&#xff0c;有人已经年薪百万&#xff0c;有人还在抢两块钱的红包。有人去过许多国家&#…

dos下设置mysql密码_MySQL数据库之dos或wamp下修改mysql密码的具体方法

本文主要向大家介绍了MySQL数据库之dos或wamp下修改mysql密码的具体方法 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。最近在纠结如何修改mysql的密码&#xff0c;终于搞定了。.在wamp环境下&#xff0c;左击你的wamp图标。在服务下面…

转:PostgreSQL角色、用户、权限和数据库安全

PostgreSQL实现了基于角色的存取控制机制。角色是权限的集合。可以将权限赋给用户&#xff0c;也可以将权限赋给角色。可以将角色赋给一个用户&#xff0c;该用户将拥有角色的所有权限。也可以将角色赋给其它的角色。PostgreSQL中的用户和角色使用同一个名字空间。数据库中不能…

iNeuOS工业互联平台,发布消息管理、子用户权限管理、元件移动事件、联动控制、油表饼状图和建筑类设备驱动,v3.4版本...

目 录1. 概述... 22. 平台演示... 23. 消息管理... 24. 子用户权限管理... 35. 元件移动事件... 36. 联动控制... 47. 增加油表和饼图... 58. 增加住建部DL/T645和智能液位计协议驱动1. 概述发布iNeuOS 3.4版本&#xff0c;主…

程序猿看段子,越看越心碎!

程序员整天面对代码&#xff0c;压力一定很大吧~小编表示应该时不时也给你们来点段子&#xff0c;增加一下生活的乐趣&#xff0c;让你们看到希望的曙光...今天整理的10个段子&#xff0c;你们绝对喜欢。看看就知道啦&#xff01;【一直有人问我&#xff0c;程序员应该看什么书…

mysql写入监控_zabbix 自定义key 监控mysql增删查改

vim /etc/zabbix/zabbix_agentd.d/mysql.conf##zabbix_agentd.d在这个文件夹下的.conf,都会被agent读取&#xff0c;我们这里新建的一个配置文件方便使用&#xff0c;这样就不需要去动主配置文件了UserParameterecho[*],echo "$1"#要传递参数要带[*]&#xff0c;且ke…

自制H3C交换机CONSOLE线

单位有一台H3C S3600交换机&#xff0c;手痒痒的想进入玩一下。 从网上查得&#xff0c;连接CONSOLE接口用的是串口&#xff0c;只不过用RJ45水晶头插入而已。 山高路远&#xff0c;囊中羞涩&#xff0c;刚好手头上有一个文曲星的连接线&#xff0c;串口的。 凭自己半桶水的电子…

5月份Github上最热门的数据科学和机器学习项目

GitHub最近以数十亿美元的交易被微软收购。GitHub一直是开发人员之间协作的终极平台&#xff0c;我们已经看到数据科学和机器学习社区同样非常需要它&#xff0c;因此&#xff0c;我们希望GitHub能在微软的保护下继续发展下去。在本月排行中&#xff0c;上榜的项目有英特尔开源…

Blazor 中如何下载文件到浏览器

Blazor 中如何下载文件到浏览器目录一、前言二、方法一&#xff08;导航跳转&#xff09;三、方法二&#xff08;下载后传出&#xff09;(一) 使用 RestSharp 下载(二) 使用 BlazorDownloadFile 传出独立观察员 2021 年 3 月 28 日一、前言最近想给之前文章《下载中转加速器 VP…

.NET 异步,你也许不知道的5种用法

async/await异步操作&#xff0c;是C#中非常惊艳的“语法糖”&#xff0c;让异步编程变得优美且傻瓜化到了不可思议的程度。就连JavaScript都借鉴了async/await语法&#xff0c;让回调泛滥的JavaScript代码变得很优美。我之前录制的.NET视频教程已经把async/await等基础知识介绍…

兼容FF,IE的纯CSS下拉菜单

代码简介&#xff1a;作者的CSS水平不错啊&#xff0c;值得我们学习&#xff0c;少了JS&#xff0c;就是好看多。 代码内容&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transiti…

荐书 | 5本数学科普让你不再“畏惧”数学,感受数学的内在美

最近&#xff0c;小木了解了许多关于数学的书籍&#xff0c;简直打开了小木数学新世界的大门。出版社寄了一些样书给小木&#xff0c;经过斟酌对比之后&#xff0c;推荐以下5本数学科普书给大家。01《数学简史》[中] 蔡天新 43.50提到数学&#xff0c;很多人的第一反应就是复杂…

操作系统hpf算法事例_操作系统调度算法是什么

操作系统调度算法是什么导读&#xff1a;小编根据大家的需要整理了一份关于《操作系统调度算法是什么》的内容&#xff0c;具体内容&#xff1a;学习操作系统的朋友们肯定遇到过调度算法&#xff0c;目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源&#xff…

ASP.NET Core依赖注入初识与思考

一、前言在上一篇中&#xff0c;我们讲述了什么是控制反转(IoC)以及通过哪些方式实现的。这其中&#xff0c;我们明白了&#xff0c;「控制反转&#xff08;IoC&#xff09;」 是一种软件设计的模式&#xff0c;指导我们设计出更优良&#xff0c;更具有松耦合的程序&#xff0c…