Python面向对象之类的继承(2)
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)的更多相关文章
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Python面向对象中的继承、多态和封装
Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...
- Python - 面向对象编程 - 多继承
继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 这篇文章讲的都是单继承,Python 中还有多继承 Python 多继承的背景 大部分面向对象 ...
- Python()- 面向对象三大特性----继承
继承: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类(基类或超类),新建的类是所继承的类的(派生类或子类) 人类和狗 有相同的属性, 提取了一个__init__方法,在这 ...
- python 面向对象八 多继承
python是支持多继承的,在设计类的继承关系时,通常,主线都是单一继承下来的.但是,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn. 为了更好地看出继承关系,以Mi ...
- python 面向对象及封装继承和多态
######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...
- 47、Python面向对象中的继承有什么特点?
继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要 ...
- Python面向对象,析构继承多态
析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...
- python面向对象--私有和继承
一. 私有属性和私有方法 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到 私有属性 就是 对象 不希望公开的属性 (属性即类里面的变量) 私有方法 就是 ...
随机推荐
- LeetCode Count and Say 数数字
class Solution { public: string countAndSay(int n) { ) "; "; int i,t,count; char c='*'; ;i ...
- UOJ#122【NOI2013】树的计数
[NOI2013]树的计数 链接:http://uoj.ac/problem/122 按BFS序来,如果$B_i$与$B_{i-1}$必须在同一层,那么贡献为0,必须在不同层那么贡献为1,都可以贡献为 ...
- 【洛谷4149】[IOI2011] Race(点分治)
点此看题面 大致题意: 给你一棵树,问长度为\(K\)的路径至少由几条边构成. 点分治 这题应该比较显然是点分治. 主要思路 与常见的点分治套路一样,由于\(K≤1000000\),因此我们可以考虑开 ...
- 2017.12.20 Java中的 IO/XML学习总结 File类详细
IO / XML 一.File类 1.定义/概念 Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件.File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文 ...
- python脚本执行报错:SyntaxError: Non-ASCII character '\xe6' in file ip.py on line 4...
报错信息 [root@chenbj ~]# python ip.py 192.168.1.1 File "ip.py", line 4 SyntaxError: Non-ASCII ...
- selective search生成.mat文件
https://github.com/sergeyk/selective_search_ijcv_with_python 里的selective_search.py是python接口 import t ...
- python_50_函数与函数式编程
import time def logger(): """追加写""" time_format='%Y-%m-%d %X'#年-月-日 小时 ...
- javascrit中“字符串为什么可以调用成员”
<script> var title = "this is title"; console.log(title.substr(0,5)); //字符串为什么可以调用 ...
- cuda api查询问题
在查询CUDA运行时API的时候,我用360极速浏览器的时候搜索结果一直不出来,但是用火狐的话就很流畅,所以建议大家在开发时还是用火狐浏览器.
- Bootstrap历练实例:轮播(carousel)
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...