【发布时间】:2013-12-05 22:10:21
【问题描述】:
有什么方法可以用__getattr__判断方法和属性调用的区别吗?
即在:
class Bar(object):
def __getattr__(self, name):
if THIS_IS_A_METHOD_CALL:
# Handle method call
def method(**kwargs):
return 'foo'
return method
else:
# Handle attribute call
return 'bar'
foo=Bar()
print(foo.test_method()) # foo
print(foo.test_attribute) # bar
这些方法不是本地的,因此无法使用 getattr/callable 来确定它。我也明白方法是属性,可能没有解决方案。只是希望有一个。
【问题讨论】:
-
你可以判断你应该返回的对象是否是可调用的,但这并不意味着它会被调用......例如:
list.reverse是否足以“如果THIS_IS_A_METHOD_CALL"...或者是方法调用所需的"list.reverse()"