修复对象在 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
块中的关联属性以避免任何错误。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。