修复对象在 Python 中没有属性错误

Manav Narula 2022年12月21日
修复对象在 Python 中没有属性错误

属性是与类的对象相关联的函数或属性。Python 中的一切都是对象,所有这些对象都有一个具有某些属性的类。我们可以使用 . 访问这些属性。运算符。

本教程将讨论 Python 中的 object has no attribute python 错误。此错误属于 AttributeError 类型。

我们在尝试访问对象的不可用属性时遇到此错误。例如,Python 中的 NumPy 数组有一个名为 size 的属性,它返回数组的大小。但是,这不存在于列表中,因此如果我们将此属性与列表一起使用,我们将得到这个 AttributeError

请参阅下面的代码。

import numpy as np

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

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

输出:

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

上面的代码返回 NumPy 数组的 size,但它不适用于列表并返回 AttributeError

这是另一个用户定义类的例子。

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


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


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

输出:

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

在上面的示例中,两个类以类似的函数启动以显示消息。错误显示是因为调用的函数与 B 类无关。

我们可以用不同的方式解决这个错误。dir() 函数可用于查看对象的所有相关属性。但是,此方法可能会丢失通过元类继承的属性。

我们还可以将对象更新为支持所需属性的类型。但是,这不是一个好方法,可能会导致其他不需要的错误。

我们也可以使用 hasattr() 函数。如果属性属于给定对象,则此函数返回 True。否则,它将返回 False。

请参阅下面的代码。

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

输出:

True
False

在上面的例子中,对象 b 具有属性 disp,所以 hasattr() 函数返回 True。该列表没有属性 size,因此它返回 False。

如果我们想要一个属性返回一个默认值,我们可以使用 setattr() 函数。此函数用于创建具有给定值的任何缺失属性。

请参阅此示例。

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


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

输出:

58

上面的代码附加了一个名为 show 的属性和值为 58 的对象 b

我们也可以有一个代码,其中我们不确定 tryexcept 块中的关联属性以避免任何错误。

作者: 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

相关文章 - Python Object