修复对象在 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
。
我们也可以有一个代码,其中我们不确定 try
和 except
块中的关联属性以避免任何错误。
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