【发布时间】:2014-08-11 05:08:24
【问题描述】:
鉴于以下关于 X 类实例的示例:
class X():
def __call__(self, incoming_list):
print incoming_list
X()([x for x in range(10)])
如何使用类本身而不是实例的__call__ 魔术方法获得相同的输出?示例:
X([x for x in range(10)])
直接调用,好像传递给__init__。但是,在它调用__call__ 之前调用__new__ 将参数传递给__init__。我怎样才能访问那个“元类__call__”?有可能吗?
为了更容易理解,这给了我相同的输出:
class X:
def __call__(self, incoming_list):
print incoming_list
X().__call__([x for x in range(10)])
我想要这样的东西:
class X:
def X.__call__(incoming_list): # Syntax Error
print incoming_list
X.__call__([x for x in range(10)])
【问题讨论】:
-
你的元类在哪里?
-
我不明白你想在这里实现什么。
def foo(xs): print(xs); foo([x for x in range(10]);你真的用这些神奇的东西做什么? -
...您是否尝试过实际使用元类而不是在问题中随机提及它?
-
“如果你不知道元类是什么,那么你不需要它们的概率是 99%。”
-
一个类没有可以覆盖的
__call__。类构造函数称为__new__。
标签: python class call metaclass