请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

8-7中13:00左右, BaseModel有两行代码不太理解?

图片描述
BaseModel这个类的__init__函数最后一行return super().init()不太理解其含义, 先谈谈我的理解:

super()指BaseModel这个类在__mro__中继承的上一个类, 也就是object, 所以这行等价于return object.init(), 这个返回的是个什么对象呢?返回的对象会到哪去呢?很疑惑…

正在回答 回答被采纳积分+3

3回答

慕少0351952 2022-06-07 10:38:15

继承的C3算法?

0 回复 有任何疑惑可以回复我~
bobby 2019-10-30 18:41:11
class A(object):
    def __init__(self):
        super(A, self).__init__() #可以注释这一行再看看会不会调用B的init

class B(object):
    def __init__(self):
        print("i am in B")
        super(B, self).__init__()

class C(A, B):
    def __init__(self):
        print("i am in C")
        super(C, self).__init__()


c = C()

可以理解一下A中继承的明明是object,调用super()为什么会调用B的init方法呢

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1946152704 #1
    是不是可以这么理解:
    C.__mro__顺序是 C->A->B,  而在A,B,C 三个类对象中的super()都是共享的这个顺序表, 所以在A中super()时也是按这个顺序表调用的B?
    回复 有任何疑惑可以回复我~ 2019-11-01 16:40:21
  • 提问者 慕粉1946152704 #2
    另外还有一个问题, 老师的课中讲到super()是按照类的继承关系通过C3算法来决定获取顺序的, 但是元类和调用该元类的类是属于类的实例化关系, 并非类的继承, 这种情况下super()的继承顺序又是咋样的呢?
    回复 有任何疑惑可以回复我~ 2019-11-01 16:48:28
  • 提问者 慕粉1946152704 #3
    所以类
    class C(metclass=BaseModel, A):
            pass
    中A、C、BaseModel中super()的继承顺序又是怎样的呢?
    回复 有任何疑惑可以回复我~ 2019-11-01 16:53:42
bobby 2019-10-30 18:31:32

如果我定义了一个c 

class C(BaseModel, BaseModel2):
    pass

这个时候在c中调用了super().__init__(), 会去调用BaseModel中init,这个时候BaseModel调用super()还会是object类吗?

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信