修復物件在 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