Arreglar el error Object Has No Attribute en Python

Manav Narula 21 diciembre 2022
Arreglar el error Object Has No Attribute en Python

Los atributos son funciones o propiedades asociadas con un objeto de una clase. Todo en Python es un objeto, y todos estos objetos tienen una clase con algunos atributos. Podemos acceder a tales propiedades usando el . operador.

Este tutorial discutirá el error object has no attribute python en Python. Este error pertenece al tipo AttributeError.

Encontramos este error cuando intentamos acceder al atributo no disponible de un objeto. Por ejemplo, las matrices NumPy en Python tienen un atributo llamado size que devuelve el tamaño del array. Sin embargo, esto no está presente con las listas, por lo que si usamos este atributo con una lista, obtendremos este AttributeError.

Vea el código a continuación.

import numpy as np

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

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

Producción :

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

El código anterior devuelve el size del array NumPy, pero no funciona con listas y devuelve el AttributeError.

Aquí hay otro ejemplo con clases definidas por el usuario.

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


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


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

Producción :

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

En el ejemplo anterior, se iniciaron dos clases con funciones similares para mostrar mensajes. El error aparece porque la función llamada no está asociada a la clase B.

Podemos abordar este error de diferentes maneras. La función dir() se puede utilizar para ver todos los atributos asociados de un objeto. Sin embargo, este método puede perder atributos heredados a través de una metaclase.

También podemos actualizar nuestro objeto al tipo que admita el atributo requerido. Sin embargo, este no es un buen método y puede conducir a otros errores no deseados.

También podemos usar la función hasattr(). Esta función devuelve True si un atributo pertenece al objeto dado. De lo contrario, devolverá False.

Vea el código a continuación.

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"))

Producción :

True
False

En el ejemplo anterior, el objeto b tiene el atributo disp, por lo que la función hasattr() devuelve True. La lista no tiene un atributo size, por lo que devuelve False.

Si queremos que un atributo devuelva un valor por defecto, podemos utilizar la función setattr(). Esta función se utiliza para crear cualquier atributo faltante con el valor dado.

Vea este ejemplo.

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


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

Producción :

58

El código anterior adjunta un atributo llamado show con el objeto b con un valor de 58.

También podemos tener un código en el que no estamos seguros de los atributos asociados en un bloque try y except para evitar cualquier error.

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

Artículo relacionado - Python Object