小编T.A*_*.A.的帖子

Python的内置类型.__ init __(name,bases,dct)有什么作用吗?

我已经看到了一些Python元类使用super()调用的示例type.__init__()。这是做什么的?

例:

class Meta(type):
    def __new__(cls, name, bases, dct):
        dct['a']='a'
        cls_obj = super(Meta, cls).__new__(cls, name, bases, dct)
        return cls_obj

    def __init__(cls_obj, name, bases, dct):
        cls_obj.b = 'b'
        dct['c'] = 'c'
        #what does this do
        super(Meta, cls_obj).__init__(name, bases, dct)

class Meta2(Meta):
    def __init__(cls_obj, name, bases, dct):
        cls_obj.b = 'b'

class Klass(metaclass=Meta):
    pass

class Klass2(metaclass=Meta2):
    pass


if __name__ == '__main__':
    print(Klass.a)
    print(Klass.b)
    print(Klass.c)
Run Code Online (Sandbox Code Playgroud)

输出:

a
b
<...my system traceback...>
AttributeError: type object 'Klass' has no attribute 'c'
Run Code Online (Sandbox Code Playgroud)

显然 …

python metaclass python-internals

1
推荐指数
1
解决办法
73
查看次数

标签 统计

metaclass ×1

python ×1

python-internals ×1