首页 > 解决方案 > 带有类及其元类的“超级”

问题描述

签名是:super([type[, object-or-type]])。它的文档说:

如果省略第二个参数,则返回的超级对象是未绑定的。如果第二个参数是一个对象,则isinstance(obj, type)必须为真。如果第二个参数是类型,则issubclass(type2, type)必须为真(这对类方法很有用)。

根据文档,如果有人想要super(metatype, type),第二个参数是一个类型,所以issubclass(type, metatype)必须是真的。但我的测试程序显示它可能是错误的:

#!/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()

这是保证还是未定义?

标签: pythonpython-3.xsuper

解决方案


推荐阅读