2 votes

python getattr() avec plusieurs paramètres

La construction getattr(obj, 'attr1.attr2', None) ne fonctionne pas. Quelles sont les meilleures pratiques pour remplacer cette construction ? Diviser cette construction en deux déclarations getattr ?

5voto

Kasramvd Points 32864

Vous pouvez utiliser operator.attrgetter() afin d'obtenir plusieurs attributs à la fois :

from operator import attrgetter

my_attrs = attrgetter(attr1, attr2)(obj)

0voto

aleclara95 Points 1

Comme indiqué dans cette réponse la solution la plus simple serait d'utiliser l'option operator.attrgetter (plus d'informations dans cette page de documentation sur python ).

Si, pour une raison quelconque, cette solution ne vous satisfait pas, vous pouvez utiliser cet extrait de code :

def multi_getattr(obj, attr, default = None):
"""
Get a named attribute from an object; multi_getattr(x, 'a.b.c.d') is
equivalent to x.a.b.c.d. When a default argument is given, it is
returned when any attribute in the chain doesn't exist; without
it, an exception is raised when a missing attribute is encountered.

"""
attributes = attr.split(".")
for i in attributes:
    try:
        obj = getattr(obj, i)
    except AttributeError:
        if default:
            return default
        else:
            raise
return obj

# Example usage
obj  = [1,2,3]
attr = "append.__doc__.capitalize.__doc__"

multi_getattr(obj, attr) #Will return the docstring for the
                         #capitalize method of the builtin string
                         #object

de cette page ce qui fonctionne. Je l'ai testé et utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X