python基础===继承和多继承
继承
class A:
def spam(self):
print("A.SPAM") def add(self, x,y):
return x+y class B(A):
def spam(self):
"""
如果子类要对父类的方法进行重写,再想调用父类的方法,就需要使用super().方法名() 的形式
"""
print("B.Spam")
super().spam() #调用父类的spam() b = B()
b.spam()
print(b.add(8,8)) class C:
def __init__(self):
self.x = 100
def compare(self, num):
if self.x>num:
return self.x
else:
return num class D(C):
def __init__(self):
super().__init__() #super() 函数的一个常见用法是在__init__() 方法中确保父类被正确的初始化
self.x = 300 #更改父类
self.y = 500 d= D()
print(d.compare(101)) #300 得到的结果也会更改
print(d.y) #
print(d.x)
多继承
http://python.jobbole.com/86787/
#python中的多继承 class A:
def foo(self):
print("A类的方法") class B:
def foo(self):
print("B类的方法") def foo_1(self):
print("B类专有的方法") class C(A,B):
pass class D(C, A):
pass """
class D(A, C):
pass
会报错:
TypeError: Cannot create a consistent method resolution
order (MRO) for bases A, C
原因分析参考:
https://www.cnblogs.com/yudy/archive/2013/06/10/3130521.html
https://www.cnblogs.com/seven777/p/7189932.html
""" c = C()
c.foo()
#>>>A类的方法 c.foo_1()
#>>>B类专有的方法 d = D()
d.foo()
#>>>A类的方法 print(D.mro())
#>>>[<class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.A'>, <class 'object'>]
总结:
两个概念:经典类,新式类
继承搜索的顺序发生了改变,经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;
新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动
参考文章:
http://python.jobbole.com/86787/
https://www.zhihu.com/question/266882644
python基础===继承和多继承的更多相关文章
- python基础学习笔记——单继承
1.为什么要有类的继承性?(继承性的好处)继承性的好处:①减少了代码的冗余,提供了代码的复用性②提高了程序的扩展性 ③(类与类之间产生了联系)为多态的使用提供了前提2.类继承性的格式:单继承和多继承# ...
- python基础学习笔记—— 多继承
本节主要内容: 1.python多继承 2.python经典类的MRO 3.python新式类的MRO.C3算法 4.super是什么鬼? 一.python多继承 在前⾯的学习过程中. 我们已经知道了 ...
- python基础学习之类的继承、魔法方法
什么是继承 即类A可以使用类B的方法,即B是A的父类,A是B的子类,AB之间是继承关系 class Father(): # 父类 def __init__(self,name,age): self. ...
- python基础(17)继承类和面向对象初识
1.继承类 class Lm: money = 1000000 house = 5 def driver(self): print('会开车') class Mcb(Lm): def about_me ...
- python基础——继承和多态
python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...
- python基础——继承实现的原理
python基础--继承实现的原理 1 继承顺序 class A(object): def test(self): print('from A') class B(A): def test(self) ...
- python基础——继承与派生、组合
python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...
- Python基础之继承与派生
一.什么是继承: 继承是一种创建新的类的方式,新建的类可以继承一个或过个父类,原始类成为基类或超类,新建的类则称为派生类 或子类. 其中,继承又分为:单继承和多继承. class parent_cla ...
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
随机推荐
- .NET中SQL Server数据库连接方法
1. 使用本机上的SQL Server Express 实例上的用户实例. 用户实例的连接创建了一个新的SQL Server 实例.此连接只能是在本地SQL Server 2005实例上并 ...
- Version
题目 有三个操作: \(change \ u \ v \ a \ b\) : \(u\)到\(v\)路径上的点点权加上\(a+k*b\),\(k\)为第几个点,\(u\)为第0个点. \(query ...
- 【bzoj1606】[Usaco2008 Dec]Hay For Sale 购买干草 背包dp
题目描述 约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草. 顿因有H(1≤H≤5000)包干草,每一包都有它的体 ...
- Linux 文件上传Linux服务器
进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...
- BZOJ4028 HEOI2015公约数数列(分块)
前缀gcd的变化次数是log的,考虑对每一种gcd查询,问题变为查询一段区间是否存在异或前缀和=x/gcd. 无修改的话显然可以可持久化trie,但这玩意实在没法支持修改.于是考虑分块. 对于每一块将 ...
- [牛客练习赛29D]禁止动规
description newcoder 你在一个无限长的数轴上,一开始你在原点 本来你只有两种操作:向左dp,以及向右dp 然而由于禁止dp 于是你只能另寻出路 万幸的是,dp之神随机给了你n个变量 ...
- BZOJ1502:[NOI2005]月下柠檬树——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1502 https://www.luogu.org/problemnew/show/P4207 李哲 ...
- 从零开始学Linux系统(四)之Vi/Vim操作指令
模式切换: 编辑模式 <-- [:]<--命令模式 -->[a.i.o A.I.O]--> 插入模式 编辑模式操作: 设置行号 :set nu :set nonu 复制 ...
- python----测试04.18
# py4测试题 # 1.8 << 2 # 等于? 8转化成二进制:1000 向左移动2位: 0010 0000 转化成十进制:32 # 2.通过内置函数计算5除以2的余数 print(d ...
- centos上tensorflow一键安装脚本
鉴于tensorflow在centos上安装相当麻烦,特地制作了一个脚本方便以后移植到其它机器上,脚本含有其它python常用包: #! /bin/bash sudo yum install -y ...