我写了这样的代码
>>> class a(object):
def __init__(self):
self.__call__ = lambda x:x
>>> b = a()
我原以为a类的对象应该是可调用的对象,但最终却不是。
>>> b()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
b()
TypeError: 'a' object is not callable
>>> callable(b)
False
>>> hasattr(b,'__call__')
True
>>>
我不明白为什么。请帮帮我。
发布于 2009-11-10 14:12:50
需要在类上定义__call__
,而不是在实例上
class a(object):
def __init__(self):
pass
__call__ = lambda x:x
但是大多数人可能会发现用通常的方式定义方法更具可读性。
class a(object):
def __init__(self):
pass
def __call__(self):
return self
如果你需要每个实例有不同的行为,你可以这样做
class a(object):
def __init__(self):
self.myfunc = lambda x:x
def __call__(self):
return self.myfunc(self)
发布于 2011-03-21 10:03:57
那这个呢?定义一个基类AllowDynamicCall:
class AllowDynamicCall(object):
def __call__(self, *args, **kwargs):
return self._callfunc(self, *args, **kwargs)
然后是AllowDynamicCall的子类:
class Example(AllowDynamicCall):
def __init__(self):
self._callfunc = lambda s: s
https://stackoverflow.com/questions/1705928
复制相似问题