元类属性和元类kwarg有什么区别

2024-06-16 12:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

class属性__metaclass__和class关键字参数metaclass之间的区别是什么

考虑这个例子:

class Meta1(type):
    def __new__(cls, name, bases, attrs):
        attrs.update({'x': 100})
        return super().__new__(cls, name, bases, attrs)


class Foo(metaclass=Meta1):
    pass


class Bar(object):
    __metaclass__ = Meta1



f = Foo()
b = Bar()

f.x
>> 100
b.x
>> AttributeError: 'Bar' object has no attribute 'x'

我原以为FooBar实例在功能上是等价的,但显然不是


Tags: namenew参数属性objectfoobar关键字
1条回答
网友
1楼 · 发布于 2024-06-16 12:15:05

__metaclass__属性是用于声明元类的python2语法。metaclass=kwarg是python3语法

如果您需要一个代码库来支持python2和python3,那么可以使用future,它有a helper for this

相关问题 更多 >