【发布时间】:2021-11-26 05:57:06
【问题描述】:
我不知道super().__init__(*args, **kwargs)在这里做什么。
class B(type):
def __init__(self, *args, **kwargs):
self.a = 'a'
super().__init__(*args, **kwargs)
class A(metaclass=B):
pass
据我所知,super() 返回一个跟踪 MRO 中当前位置的超类的实例。当调用 super 实例的方法时,super 会查找 MRO 中的下一个类并调用该类的方法。
B.__mro__
(<class '__main__.B'>, <class 'type'>, <class 'object'>)
super().__init__(*args, **kwargs)调用__init__方法,是什么意思?
如果我删除它
class B(type):
def __init__(self, *args, **kwargs):
self.a = 'a'
class A(metaclass=B):
pass
初始化A类
x=A()
x.a
'a'
实例x属于A类仍然拥有a的属性,效果相同。
【问题讨论】:
-
它只是将任何位置和关键字参数传递给父级的“构造函数”。
-
在不将位置和关键字参数传递给父级的“构造函数”的情况下,效果相同。
-
它将这些参数传递给它的父构造函数,以便在它的构造中做任何需要做的事情,对于这个特定的例子来说,放置那条线或者不改变任何东西,但它可能需要更多精心设计的继承方案
-
请举个具体的例子。
标签: python python-3.x metaclass