我想问一下
sup = super(self, self)
David Beazley 和 Brian K. Jones 的 Python Cookbook 3rd 有很多这样的例子。这是书中一个代码的缩写摘录:
class MatchSignaturesMeta(type):
def __init__(self, clsname, bases, clsdict):
super().__init__(clsname, bases, clsdict)
sup = super(self, self)
for name, value in clsdict.items():
# ...
prev_dfn = getattr(sup, name, None)
# ...
class Root(metaclass=MatchSignaturesMeta):
pass
class A(Root):
def foo(self, x, y):
pass
# ...
通过实验我知道第二个 super 参数是强制性的。 sup 打印为:
<super: <class 'Root'>, <Root object>>
在文档中super他们说
"如果省略第二个参数,则返回的超对象是 未绑定(bind)。”
“绑定(bind)/未绑定(bind)方法”(第一个参数绑定(bind)到类实例的函数)很熟悉。 什么是“绑定(bind)对象”?
在示例中,正在创建 Root 类。我没有看到明确的 Root 对象创建。我想问 Root 对象(来自上面的 sup 可打印表示)来自哪里?
在 Debian GNU/Linux 9.11 (stretch) 上使用 Python 3.5.3