python的类和对象中的super函数的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的类和对象中的super函数的问题相关的知识,希望对你有一定的参考价值。
问题一:D中继承的B和C,那么不应该把B继承完再继承C吗?就是进入B 离开B,再执行进入C,离开C
问题二:D中继承的B和C,B和C都继承了A,那为什么最后的输出只有一个进入A 离开A?
因为在B类中调用了super方法,所以没有执行完B类就去执行C类的程序
super方法在多重继承程序中的调用顺序,采用的是C3算法(在python3中)。
C3算法的规则如下
①.从底层开始,选择入边为零的点。
②.从左到右。
③深度探索。但受限于②规则。
每一个类都可以用mro函数查看自己的继承顺序(MRO全称Method Resolution Order,就是用来定义继承方法的调用顺序)
对于你的程序
分析
①规则。得到D类,去掉D类以后,入边为零的是B类和C类
②规则。选择B类,去掉B类后,入边为零的只有C类。结论是D–>B–>C–>A。
在d=D()语句前加print(D.mro()),就可以打印出D类的继承顺序
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
问题二
python3的继承不同于普通的继承,super函数已经考虑到了重复继承的问题,所以对于A类只访问一次 参考技术A 面向对象有继承关系表,d继承自bc,初始化会调用bc,同时bc都继承a,调用a
python中的类和对象
类和对象
1. 类和对象和概念
- 类:共性事物的抽象,是对某一类具有共同事物的描述,是具有相同属性和方法的集合
- 对象:类的实例,是共性事物的一个体现,是这类事物中的每个个体
2. 总结:
类是对象的模板,对象是类的实例
3. 创建类的语法
class Math: #类名一般首字母大写 a = 4 #属性 b = 5 def add(self): c = self.a + self.b return c
注意:
- 类名一般首字母大写,比如class User ,其中class是关键字
- 类里面包含属性(变量)与方法(函数)
- 类函数自带self关键字,不能少! self指向对象本身,是类的实例的一个引用
- 如果在类或函数里面要调用属性(self.属性名),方法(self.方法名)
实例化
1. 实例名 = 类名(),如上面的Math类实例化; math_1 = Math()
2. 示例
class Friend: def __init__(self, height, age, money): self.height = height self.age = age self.money = money def can_Cook(self, can = True): if can == True: return "会做饭!" else: return "不会做饭!" Peter = Friend("178", 27, "2000000") print("Peter今年{0}岁,身高{1}cm, 存款{2}元, 并且{3}".format(Peter.age, Peter.height, Peter.money,Peter.can_Cook()))
运行结果:
Peter今年27岁,身高178cm, 存款2000000, 并且会做饭!
以上是关于python的类和对象中的super函数的问题的主要内容,如果未能解决你的问题,请参考以下文章