2011-01-21 41 views
2
class Thing(): 
    xyz = "I'm a string" 

class Truc(): 
    def xyz(self): 
     return "I'm a function" 

def valueOrCalledValue(input): 
    if callable(input): 
     return input() 
    else: 
     return input 

thing = Thing() 
print valueOrCalledValue(thing.xyx) 

>>> "I'm a string" 

truc = Truc() 
print valueOrCalledValue(truc.xyz) 

>>> "I'm a function" 

是否有一个内置函数可以完成我的valueOrCalledValue的功能?内置函数可以调用时获取对象的值吗?

回答

6

使用装饰,使之整齐尝试properties

+0

这可能是我试图解决的问题的最佳解决方案。 – Joe 2011-01-21 11:59:38

1

我不知道任何内置函数来做到这一点。或者,你可以在一行中使用“如果别人”表达做到这一点:

print my_thing() if callable(my_thing) else my_thing 

将其分配给一个变量的工作方式相同:

my_var = my_thing() if callable(my_thing) else my_thing 
1

使用此。这更简单,总是适用于“可调用”的所有可能的变体。

def valueOrCalledValue(input): 
    try: 
     return input() 
    except TypeError: 
     return input 
+0

对'可调用''上所有可能的变体'的含义感兴趣。你能解释还是举例? – Joe 2011-01-21 13:29:53

相关问题