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

注意:

  1. 类名一般首字母大写,比如class User ,其中class是关键字
  2. 类里面包含属性(变量)与方法(函数)
  3. 类函数自带self关键字,不能少! self指向对象本身,是类的实例的一个引用
  4. 如果在类或函数里面要调用属性(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函数的问题的主要内容,如果未能解决你的问题,请参考以下文章

Python中的类和方法使用举例

python中的类和对象

python中的类和对象,属性和方法

python中的类和对象

python中的类和对象

python(类和对象相关知识)