Corriger l'erreur Object Has No Attribute en Python

Manav Narula 21 décembre 2022
Corriger l'erreur Object Has No Attribute en Python

Les attributs sont des fonctions ou des propriétés associées à un objet d’une classe. Tout en Python est un objet, et tous ces objets ont une classe avec certains attributs. Nous pouvons accéder à ces propriétés en utilisant le . opérateur.

Ce tutoriel discutera de l’erreur object has no attribute python en Python. Cette erreur appartient au type AttributeError.

Nous rencontrons cette erreur lorsque nous essayons d’accéder à l’attribut indisponible d’un objet. Par exemple, les tableaux NumPy en Python ont un attribut appelé size qui renvoie la taille du tableau. Cependant, ceci n’est pas présent avec les listes, donc si nous utilisons cet attribut avec une liste, nous obtiendrons cette AttributeError.

Voir le code ci-dessous.

import numpy as np

arr1 = np.array([8, 4, 3])
lst = [8, 4, 3]

print(arr1.size)
print(lst.size)

Production :

3
AttributeError: 'list' object has no attribute 'size'

Le code ci-dessus renvoie la size du tableau NumPy, mais il ne fonctionne pas avec les listes et renvoie le AttributeError.

Voici un autre exemple avec des classes définies par l’utilisateur.

class A:
    def show():
        print("Class A attribute only")


class B:
    def disp():
        print("Class B attribute only")


a = A()
b = B()
b.show()

Production :

AttributeError: 'B' object has no attribute 'show'

Dans l’exemple ci-dessus, deux classes ont été initiées avec des fonctions similaires pour afficher des messages. L’erreur s’affiche car la fonction appelée n’est pas associée à la classe B.

Nous pouvons aborder cette erreur de différentes manières. La fonction dir() permet de visualiser tous les attributs associés d’un objet. Cependant, cette méthode peut manquer des attributs hérités via une métaclasse.

Nous pouvons également mettre à jour notre objet vers le type qui prend en charge l’attribut requis. Cependant, ce n’est pas une bonne méthode et peut entraîner d’autres erreurs indésirables.

On peut aussi utiliser la fonction hasattr(). Cette fonction renvoie True si un attribut appartient à l’objet donné. Sinon, il renverra False.

Voir le code ci-dessous.

class A:
    def show():
        print("Class A attribute only")


class B:
    def disp():
        print("Class B attribute only")


a = A()
b = B()
lst = [5, 6, 3]
print(hasattr(b, "disp"))
print(hasattr(lst, "size"))

Production :

True
False

Dans l’exemple ci-dessus, l’objet b a l’attribut disp, donc la fonction hasattr() renvoie True. La liste n’a pas d’attribut size, elle renvoie donc False.

Si nous voulons qu’un attribut renvoie une valeur par défaut, nous pouvons utiliser la fonction setattr(). Cette fonction est utilisée pour créer tout attribut manquant avec la valeur donnée.

Voir cet exemple.

class B:
    def disp():
        print("Class B attribute only")


b = B()
setattr(b, "show", 58)
print(b.show)

Production :

58

Le code ci-dessus attache un attribut appelé show avec l’objet b avec une valeur de 58.

On peut aussi avoir un code où l’on n’est pas sûr des attributs associés dans un bloc try et except pour éviter toute erreur.

Auteur: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Article connexe - Python Object