采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
BaseModel这个类的__init__函数最后一行return super().init()不太理解其含义, 先谈谈我的理解:
super()指BaseModel这个类在__mro__中继承的上一个类, 也就是object, 所以这行等价于return object.init(), 这个返回的是个什么对象呢?返回的对象会到哪去呢?很疑惑…
继承的C3算法?
class
A(
object
):
def
__init__(
self
super
(A,
).__init__()
#可以注释这一行再看看会不会调用B的init
B(
print
(
"i am in B"
)
(B,
C(A, B):
"i am in C"
(C,
c
=
C()
可以理解一下A中继承的明明是object,调用super()为什么会调用B的init方法呢
是不是可以这么理解: C.__mro__顺序是 C->A->B, 而在A,B,C 三个类对象中的super()都是共享的这个顺序表, 所以在A中super()时也是按这个顺序表调用的B?
另外还有一个问题, 老师的课中讲到super()是按照类的继承关系通过C3算法来决定获取顺序的, 但是元类和调用该元类的类是属于类的实例化关系, 并非类的继承, 这种情况下super()的继承顺序又是咋样的呢?
所以类 class C(metclass=BaseModel, A): pass 中A、C、BaseModel中super()的继承顺序又是怎样的呢?
如果我定义了一个c
C(BaseModel, BaseModel2):
pass
这个时候在c中调用了super().__init__(), 会去调用BaseModel中init,这个时候BaseModel调用super()还会是object类吗?
登录后可查看更多问答,登录/注册
socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO
1.2k 31
1.1k 24
1.1k 16
1.5k 10
1.2k 9
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号