Вы можете попробовать вызвать связанный метод, если он один:
for f, v in customFields.iteritems():
try:
v = v()
except TypeError:
pass
values.append(v)
Проблема, конечно же, заключается в выборе дизайна (HP или кого-либо еще) для смешивания «аксессоров» с другими видамизначения - методы доступа не являются хорошим выбором Pythonic и должны быть заменены свойствами (где этот «вызов» автоматизируется для вас там, где это необходимо).Это предложение о возможном способе обойти этот неудачный выбор дизайна.
Просто попытка вызова и проверка на наличие ошибки TypeError, которая может возникнуть, если значение не вызывается (или не вызывается без аргументов), лучше, чемиспользуя callable
или проверяя специальный метод __call__
, потому что эти проверки никогда не сообщат вам, если "вызов без аргумента" в порядке.Итак, как обычно в Python, «лучше просить прощения по разрешению»: попробуйте выполнить операцию, найдите возможные ошибки («попросите прощения»), а не пытайтесь проверить, допустима ли операция, прежде чем пытаться ее выполнить («запросить разрешение»)).