Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python `super`带有类及其元类_Python_Python 3.x_Super - Fatal编程技术网

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
的子类。有关示例中使用的元类的更多详细信息,请参阅