Python `super`带有类及其元类
签名是:Python `super`带有类及其元类,python,python-3.x,super,Python,Python 3.x,Super,签名是:super([type[,object或type]])。它说: 如果省略第二个参数,则返回的超级对象将解除绑定。如果第二个参数是对象,isinstance(obj,type)必须为true。如果第二个参数是类型,issubclass(type2,type)必须为true(这对classmethods很有用) 根据文档,如果有人想要super(metatype,type),第二个参数是类型,因此issubclass(type,metatype)必须为true。但我的测试程序显示它可能是错误
super([type[,object或type]])
。它说:
如果省略第二个参数,则返回的超级对象将解除绑定。如果第二个参数是对象,isinstance(obj,type)
必须为true。如果第二个参数是类型,issubclass(type2,type)
必须为true(这对classmethods很有用)
根据文档,如果有人想要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()
这是确定的还是未定义的?有趣的问题,我认为这是未定义的行为,在等待别人的回答。我想区别在于
类型
和对象
C0
是类型为M1
的实例,而不是M1
的子类。有关示例中使用的元类的更多详细信息,请参阅