【发布时间】:2018-03-12 04:32:01
【问题描述】:
我使用的是 Python 3,发现无法在元类的 __call__ 内使用 super()。
为什么在下面的代码中super() 会引发TypeError: 'ListMetaclass' object is not iterable 异常?如果我从元类中删除 __call__ 方法,为什么它可以正常工作?
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['add'] = lambda self, value: self.append(value)
new_cls = type.__new__(cls, name, bases, attrs)
return new_cls
def __call__(cls, *args, **kw):
### why the 'super()' here raises TypeError: 'ListMetaclass' object is not iterable
return super().__call__(cls, *args, **kw)
return super(__class__, cls).__call__(cls, *args, **kw)
return super(__class__, cls.__class__).__call__(cls, *args, **kw)
class MyList(list, metaclass=ListMetaclass):
a=1
def bar(self):
print('test');
L=MyList()
L.add(1)
print('Print MyList :', L)
【问题讨论】:
标签: python python-3.x super metaclass