签名为:super([type[, object-or-type]])
。其doc说:
如果省略第二个参数,则返回的超级对象未绑定。如果第二个参数是一个对象,则
isinstance(obj, type)
必须为true。如果第二个参数是类型,则issubclass(type2, type)
必须为true(这对于类方法很有用)。
根据文档,如果有人想要super(metatype, type)
,则第二个参数是类型,因此issubclass(type, metatype)
必须为true。但是我的测试程序表明它可能是错误的:
#!/usr/bin/env python3
class M0(type):
def wtf(self):
print('M0')
class M1(M0):
def wtf(self):
print('M1')
class C0(metaclass=M1):
@classmethod
def wtf(cls):
assert issubclass(C0, M1) == False
super(M1, C0).wtf()
C0.wtf()
这是保证的还是不确定的?