修復物件在 Python 中沒有屬性錯誤

Manav Narula 2022年12月21日 2022年5月17日
修復物件在 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 塊中的關聯屬性以避免任何錯誤。

Author: 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