Forum Python

Please or S’enregistrer to create posts and topics.

Erreur d'accès à une clé inexistante dans getattr

Bonjour,
J'ai un problème avec une classe Python qui lève une erreur lors de l'exécution:

class MyClass:
pass

obj = MyClass()
print(getattr(obj, "name"))

Erreur : AttributeError: 'MyClass' object has no attribute 'name'

L'erreur vient du fait que vous essayez d'accéder à un attribut name qui n'existe pas dans l'objet obj de la classe MyClass. En Python, si un attribut n'existe pas pour un objet, un AttributeError est levé.
Pourquoi l'erreur se produit ?
La classe MyClass est vide et ne définit aucun attribut ou méthode.
Lorsque vous utilisez getattr(obj, "name"), Python tente de récupérer un attribut nommé name sur l'objet obj, mais comme cet attribut n'existe pas, il lève une erreur.

Solution 1: La fonction getattr accepte un troisième argument qui spécifie une valeur par défaut si l'attribut n'existe pas.

class MyClass:
    pass

obj = MyClass()
print(getattr(obj, "name", "Attribute not found"))  # Affichera "Attribute not found"

Solution 2 : Ajouter un attribut à la classe ou à l'instance :
Vous pouvez définir l'attribut name soit directement dans la classe, soit pour l'instance de l'objet.

Définir name dans la classe :

class MyClass:
    name = "Default Name"

obj = MyClass()
print(getattr(obj, "name"))  # Affichera "Default Name"

# Définir name dans l'instance :
class MyClass:
    pass

obj = MyClass()
obj.name = "Instance Name"  # Ajouter dynamiquement l'attribut 'name'
print(getattr(obj, "name"))  # Affichera "Instance Name"