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"

是否有一个内置函数可以完成 my 的valueOrCalledValue工作?

4

3 回答 3

6

尝试使用装饰器来整理属性。

于 2011-01-21T11:56:51.117 回答
1

我不知道有任何内置函数可以做到这一点。或者,您可以使用“if else”表达式在一行中执行此操作:

print my_thing() if callable(my_thing) else my_thing

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

my_var = my_thing() if callable(my_thing) else my_thing
于 2011-01-21T11:56:46.267 回答
1

用这个。它更简单,并且始终适用于“可调用”的所有可能变体。

def valueOrCalledValue(input):
    try:
        return input()
    except TypeError:
        return input
于 2011-01-21T12:57:31.043 回答