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'
我曾经认为Foo
和Bar
实例在功能上是等效的,但显然它们不是相同的。
答案 0 :(得分:4)
__metaclass__
属性是用于声明元类的python2语法。 metaclass=
kwarg是python3语法。
如果您需要一个代码库来同时支持python2和python3,则可以使用future
,它具有a helper for this。