Je le code suivant:utiliser une fonction à getattr soit pour des fonctions ou des attributs réguliers
In [38]: %paste
def set_session_attribute(obj, attribute):
if attribute.endswith('()'):
attribute = attribute.replace('()', '')
return getattr(obj, attribute)()
else:
return getattr(obj, attribute)
class Thing(object):
def __init__(self):
self.legs = 4
def length(self):
return 6
## -- End pasted text --
In [39]: x = Thing()
In [40]: y = set_session_attribute(x, 'legs')
In [41]: y
Out[41]: 4
In [42]: z = set_session_attribute(x, 'length()')
In [43]: z
Out[43]: 6
En effet, appeler avec "length()"
ne fonctionnait pas (AttributeError, no attribute length()
)
Y at-il une plus courte, plus manière maintenable de faire des fonctions comme celle-ci? Je vous remercie.
Je ne peux pas changer la fonction que je suis en train d'appeler – codyc4321
Voulez-vous dire la fonction 'set_session_attribute' ou une méthode dans la classe' Thing 'ou une autre fonction? –
Je ne peux rien changer dans les classes auxquelles j'accède, comme Thing(), un énorme système dépend de ceux – codyc4321