内置函数获取可调用对象的值?

2 投票
3 回答
2069 浏览
提问于 2025-04-16 10:22
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 的功能?

3 个回答

1

用这个吧。它更简单,并且总是适用于所有可能的“可调用”情况。

def valueOrCalledValue(input):
    try:
        return input()
    except TypeError:
        return input
1

我不知道有没有现成的函数可以做到这一点。不过,你可以用一句话来实现,使用“如果...否则...”的表达方式:

print my_thing() if callable(my_thing) else my_thing

把结果赋值给一个变量也是一样的效果:

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

试试用属性和装饰器来让代码看起来更整洁。

撰写回答