2011-01-21 76 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

相關問題