Python >> Tutoriel Python >  >> Python

Comment accéder à un attribut d'objet étant donné le nom d'attribut sous forme de chaîne ?

Vous connaissez peut-être le problème suivant : Vous avez le nom d'attribut d'un objet sous forme de chaîne - par exemple, vous l'avez lu à partir d'un fichier - et vous souhaitez accéder à l'attribut avec le nom donné. Mais vous ne pouvez pas utiliser la syntaxe object."attribute" car la notation par points ne permet qu'un accès par nom comme ceci :object.attribute . Comment résolvez-vous ce problème ? Cet article vous montrera comment !

Solution rapide : Il existe quatre façons d'accéder à l'attribut d'objet en Python via les fonctions intégrées :

  • getattr() — donne accès à l'attribut objet,
  • hasattr() — vérifie si un attribut existe ou non,
  • setattr() — est utilisé pour définir un attribut, si l'attribut n'existe pas, il sera créé,
  • delattr() — supprime l'attribut.

Que sont les attributs de toute façon ?

Nous appelons attribut tout est contenu dans un objet en Python. Il n'y a pas vraiment de distinction entre les données simples et les fonctions - les deux sont des objets. Ainsi, tout ce que vous apprendrez sur les attributs s'applique également aux méthodes.

Dans cet article, j'utiliserai la classe suivante pour montrer comment accéder aux attributs. Il représente une arme à feu d'un certain nom et son calibre. De plus, il fournit un get_entry méthode qui renvoie une représentation sous forme de chaîne de l'arme.

class Gun:
    def __init__(self, name, caliber):
        self.name = name
        self.caliber = caliber

La fonction Getattr()

Comme mentionné ci-dessus, le getattr() La fonction vous permet d'accéder à l'attribut de l'objet de classe. Sa syntaxe est getattr(object, attribute, default) , les deux premiers paramètres sont obligatoires et le troisième est facultatif.

  • objet – un objet de la classe qui a été créée,
  • attribut – le nom de l'attribut dont vous voulez récupérer la valeur,
  • par défaut – message qui sera imprimé si l'attribut n'existe pas.
ak47 = Gun(name='Ak-47', caliber='7,62 mm')

print(getattr(ak47, 'caliber',
              f'the attribute named {"caliber"} does not exist'))

print(getattr(ak47, 'color',
              f'the attribute named {"color"} does not exist'))

Sortie :

7,62 mm
the attribute named color does not exist

Vous créez d'abord un Gun objet de classe. Deuxièmement, vous obtenez son calibre et sa couleur. Étant donné que votre objet n'a pas d'attribut appelé color , vous n'avez reçu que son calibre et l'information que l'attribut nommé couleur n'existe pas .

Vous pouvez exécuter ce code dans notre shell Python interactif :

Exercice :Modifiez la sortie pour imprimer également le nom de l'objet.

La fonction Hasattr()

Le hasattr() la fonction vérifie si l'attribut existe et imprime la valeur booléenne :True si oui ou False s'il n'existe pas. Cette fonction n'a que deux paramètres qui doivent être spécifiés :objet et attribut.

attributes = ['name', 'color', 'caliber', 'designer']

for attribute in attributes:
    print(hasattr(ak47, attribute))

Sortie :

True
False
True
False

Comme nous pouvons le voir, le hasattr() la fonction a vérifié si notre objet nommé ak47 a les attributs que nous avons inclus dans la liste et a renvoyé True et False valeurs pour nous. Cette fonction est particulièrement utile lorsque nous avons écrit de nombreuses lignes de code et que notre projet est énorme, nous pouvons alors vérifier rapidement et facilement si un objet a un attribut ou même plusieurs attributs.

La fonction Setattr()

Le setattr() La fonction définit un attribut. De plus, si l'attribut n'existe pas, il sera créé. Il y a trois paramètres, et tous sont obligatoires :

  • objet – objet de votre classe,
  • attribut – nom de l'attribut que vous souhaitez définir,
  • valeur – la valeur que vous souhaitez donner à l'attribut.
ak47 = Gun('ak47', '7,62 mm')

print(hasattr(ak47, 'mass'))
setattr(ak47, 'mass', '3.47 kg')
print(hasattr(ak47, 'mass'))

Sortie :

False
True

Comme vous pouvez le voir, la fonction a rempli son rôle. Au début, nous avons vérifié si l'attribut nommé mass existe et à ce moment il n'existait pas encore (False ), puis nous définissons la valeur de cet attribut et comme nous pouvons le voir, après avoir utilisé setattr() , l'objet a obtenu un nouvel attribut (True ).

La fonction Delattr()

Le delattr() La fonction supprime un attribut donné d'un objet spécifique. Comme avec hasattr() , les paramètres sont au nombre de deux :objet et attribut.

ak47 = Gun('ak47', '7,62 mm')

attributes = ['name', 'caliber']

for attribute in attributes:
    print(hasattr(ak47, attribute))

for attribute in attributes:
    delattr(ak47, attribute)

print('***')

for attribute in attributes:
    print(hasattr(ak47, attribute))

Sortie :

True
True
***
False
False

Au début, nous avons créé un objet de classe Gun et une liste avec des noms d'attributs. Plus tard, nous avons vérifié si l'objet possède ces attributs (True , True ), puis nous avons utilisé delattr() dans la boucle for et revérifié (False , False ).

Autres méthodes pour accéder à l'attribut d'objet :

Enfin, vous devez également fournir un autre moyen de vérifier/modifier la valeur de l'attribut ou de supprimer complètement l'attribut.

Vous pouvez également accéder à l'attribut en utilisant la syntaxe en pointillé :

ak47 = Gun('ak-47', '7,62 mm')
print(ak47.caliber)

print(ak47.name)
ak47.name = 'ak-74'
print(ak47.name)

Sortie :

7,62 mm
ak-47
ak-74

De cette façon, cela fonctionne également, mais rappelez-vous que cela peut provoquer une erreur lorsqu'un attribut donné n'existe pas (cela ne peut pas être évité aussi facilement qu'avec les fonctions intégrées) et en plus nous ne pouvons pas vérifier la valeur de plusieurs objets à la fois en utilisant la boucle, nous devons donc utiliser le getattr() fonction.

Vous pouvez supprimer un attribut en utilisant le del fonction :

ak47 = Gun('ak47', '7,62 mm')

attributes = ['name', 'caliber']

for attribute in attributes:
    print(hasattr(ak47, attribute))

del ak47.name
del ak47.caliber

print('***')

for attribute in attributes:
    print(hasattr(ak47, attribute))

Sortie :

True
True
***
False
False

Comme nous pouvons le voir, nous avons réussi à supprimer, mais nous devons appeler les attributs un par un, donc si nous voulons supprimer plus d'attributs, il est préférable d'utiliser le delattr() fonction et le for boucle.

Résumé

Nous avons commencé par une explication de ce que sont les attributs en Python, puis les fonctions getattr() , hasattr() , setattr() et delattr() ont été décrites. Enfin, nous avons présenté d'autres méthodes à l'aide desquelles vous pouvez voir/modifier la valeur d'un attribut et également supprimer complètement un attribut.

J'espère que cet article a répondu à toutes vos questions sur l'accès à un attribut d'objet.

Humour de programmeur – Blockchain


Post précédent