是否可以使用方法并将其称为函数或属性?
def Foo:
def bar(self,x=1,y=2):
return x+y
foo=Foo()
foo.bar #should return 3
foo.bar(4,5) #should return 9
这似乎是不可能的,因为:
__getattribute__
;如果它是一个描述符,__get__
将从__getattribute__
内调用,这意味着bar()在它甚至返回给调用者之前被评估__getattribute__
中检测到我想要实现的是(伪代码):
def __getattribute__():
if len(args)>1: return function
else: return property
但是因为args没有传递给__getattribute__
或__get__
,所以我不知道在属性和函数之间切换的位置和方式。
答案 0 :(得分:1)
只需使用:
foo.bar() # 3
foo.bar(4, 5) # 9
如果你坚持,这是一个非常难看,无法使用的解决方案,它实际上将返回3和9.在python 3.6上工作。不要使用它:
class CallableInt(int):
"""But, why????"""
def __call__(self, x, y):
return x + y
class Foo:
@property
def bar(self):
return CallableInt(3)
foo = Foo()
print(foo.bar)
print(foo.bar(4, 5))