1、除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能.

class Animal:

    def chi(self):
print(self.name+' 吃')
def he(self):
print(self.name + ' 喝') class Cat:
def __init__(self, name):
self.name = name
def jiao(self):
print('瞄')
class Dog(Animal):#继承Animal这个父类,拥有父类的方法
def __init__(self, name):
self.name = name
def jiao(self):
print(self.name+'汪') Jay = Dog('name')
Jay.chi()#这里就可以调用父类里面的方法

  如果子类和父类都有相同的一个方法,会默认执行子类的方法

/2、

2、Python里面也可以同时继承多个父类,继承方法的优先级是先找自己的方法,然后先左后右

#Python里面一个类可以同时继承多个类,java,C#里面是不可以的
class Animal:
def chi(self):
print(self.name+' 吃')
def she(self):
print(self.name + ' 爱喝')
class god:
def shit(self):
print('shit')
def she(self):
print('黄赌毒')
# class Cat:
# def __init__(self, name):
# self.name = name
# def jiao(self):
# print('瞄')
class Dog(Animal,god):
'''如果方法重复,优先从自己这里寻找,如果方法在两个父类重复
例如这里的she方法,这里默认是左边的父类优先,先在左边父类的寻找
she方法,没有再去下一个父类寻找
'''
def __init__(self, name):
self.name = name
def he(self):
print(self.name + ' 不爱喝')
def jiao(self):
print(self.name+'汪')
Jay = Dog('Jay')
Jay.she()#多个父类的方法继承是先左后右,这里会打印出Jay 爱喝

  在Python3的类的继承里面,是深度优先的,如下面代码

class Jay(object):
def f1(self):
print('Jay')
class A(Jay):
def f(self):
print('A')
class B(Jay):
def f1(self):
print('B')
class C(A):
def f(self):
print('C')
class D(B):
def f(self):
print('D')
class E(C,D):
def f(self):
print('E')
obj = E()
'''在Python3类的继承里面是广度优先的,这里调用f1的方法,会先在E自身里面寻找
,然后接着在C类里面寻找,还是找不到的话会在C的父类A类里面寻找,还找不到就轮
到去D类里面寻找,这里A类B类都继承了Jay这个基类,但是最后才会去Jay里面寻找f1
这个方法,也就是在D和B都找不到f1方法之后才会去Jay类里面寻找,这是广度优先的
体现
'''
obj.f1()#这里输入结果是B

  顺序如图所示

/3

3、多态,Python本身支持多态

#多态,就是多种形态

class Foo:
def f1(self):
print('Foo')
class Bar:
def f1(self):
print('Bar')
def func(arg):#这里显示arg的多种形态,可以是Foo类对象,也可以是Bar类的对象
arg.f1()
f=Foo()
e=Bar()
func(f)#默认参数给的什么就是什么,没有就报错
func(e)

  

4、如果子类和父类都有构造函数,那么可以有两种方法可以继承

class A:
def __init__(self):
print('A的构造方法')
self.name='佳鹏'
self.height = '1.65'
class B(A):
def __init__(self):
print('B的构造方法')
self.age = 23
super(B,self).__init__()#先执行父类的构造方法,再执行自己
b =B()#这样b也有了A的属性
print(b.__dict__)

  结果如图所示

还有一种方法是这样

class A:
def __init__(self):
print('A的构造方法')
self.name='佳鹏'
self.height = '1.65'
class B(A):
def __init__(self):
print('B的构造方法')
self.age = 23
A.__init__(self)#执行父类的构造函数,把B的实例传进去
b =B()#这样b也有了A的属性
print(b.__dict__)

  结果是一样的。

5、在Python2里面,有经典类和新式类之分,下面的图是Python2里面默认的经典类

这里输出的是A,这一种彻底的深入优先,而在Python3里面,由于B类C类都继承A,所以在先找B再找C,最后找A

在Python2里面还有一个新式类,如图,这里在A类那里继承了个object,这里的继承和Python3一样

这里输出的是C

如图是总结

Python面向对象之类的继承(2)的更多相关文章

  1. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  2. Python面向对象中的继承、多态和封装

    Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...

  3. Python - 面向对象编程 - 多继承

    继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 这篇文章讲的都是单继承,Python 中还有多继承 Python 多继承的背景 大部分面向对象 ...

  4. Python()- 面向对象三大特性----继承

    继承: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类(基类或超类),新建的类是所继承的类的(派生类或子类) 人类和狗 有相同的属性, 提取了一个__init__方法,在这 ...

  5. python 面向对象八 多继承

    python是支持多继承的,在设计类的继承关系时,通常,主线都是单一继承下来的.但是,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn. 为了更好地看出继承关系,以Mi ...

  6. python 面向对象及封装继承和多态

    ######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...

  7. 47、Python面向对象中的继承有什么特点?

    继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要 ...

  8. Python面向对象,析构继承多态

    析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...

  9. python面向对象--私有和继承

    一. 私有属性和私有方法 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到 私有属性 就是 对象 不希望公开的属性 (属性即类里面的变量) 私有方法 就是 ...

随机推荐

  1. C#,什么是Attribute?什么特性?怎么被调用?

    定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息(获取到特性类),相当于优雅的为元素添加了一个tag,这个tag是一个类. Attribu ...

  2. 无法通过CTRL+空格及SHIFT+CTRL调出输入法的解决方案

    打开任务管理器: 运行:CTFMON.EXE

  3. Aizu 2170 Marked Ancestor(并查集变形)

    寻找根节点很容易让人联想到DisjointSet,但是DisjointSet只有合并操作, 所以询问离线倒着考虑,标记会一个一个消除,这时候就变成合并了. 因为询问和查询的时间以及标记生效的时间有关, ...

  4. UVALive 3530 Martian Mining(贪心,dp)

    分析: 对于网格grid[i][j]如果放向上的管道,那么grid[i][k], k>j 就只能放向上的管道了. 那么定义dp[i][j]表示第i行,最后一个放向左的管道是j的最大总矿量. j ...

  5. 六、react添加多个className报错解决方法

    例如<div className={style.calss1,style.class2}></div> 该方法会报错 想得到最终渲染的结果:<div class='cla ...

  6. Softmax回归(Softmax Regression

    多分类问题 在一个多分类问题中,因变量y有k个取值,即.例如在邮件分类问题中,我们要把邮件分为垃圾邮件.个人邮件.工作邮件3类,目标值y是一个有3个取值的离散值.这是一个多分类问题,二分类模型在这里不 ...

  7. PHP开发框架流行度排名:Laravel居首

    摘要:在PHP开发中,选择合适的框架有助于加快软件开发,节约宝贵的项目时间,让开发者专注于功能的实现上.Sitepoint网站做了一个小的调查,结果显示最流行的PHP框架前三甲为:Laravel.Ph ...

  8. FILE对象线程安全

    根据apue讲述: 标准的IO例程可能从它们各自的内部数据结构的角度出发,是以线程安全的方式实现的!但在线程中,如果标准 IO例程都获取它们各自的锁,那么在做一次一个字符的IO时就会出现严重的性能下降 ...

  9. 项目实战8.1—tomcat企业级Web应用服务器配置与会话保持

    分类: Linux架构篇   tomcat企业级Web应用服务器配置与实战 环境背景:公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用.移动A ...

  10. webpack+thymeleaf实现数据直出

    webpack动态插入thymeleaf模板,MVC将要使用数据传递到模板中渲染,得到的html就已经带有要初始显示的数据了github:https://github.com/947133297/we ...