Встроенная функция для получения значения объекта при вызове? - PullRequest
2 голосов
/ 21 января 2011
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 ]

6 голосов
/ 21 января 2011

Попробуйте свойства с использованием декораторов, чтобы привести его в порядок.

1 голос
/ 21 января 2011

Используйте это.Это проще, и всегда работает для всех возможных вариантов на «вызываемой».

def valueOrCalledValue(input):
    try:
        return input()
    except TypeError:
        return input
1 голос
/ 21 января 2011

Я не знаю встроенной функции для этого.В качестве альтернативы, вы можете сделать это в одной строке, используя выражение «if else»:

print my_thing() if callable(my_thing) else my_thing

присвоение переменной переменной работает так же:

...