Python で Object Has No Attribute エラーを修正する
属性は、クラスのオブジェクトに関連付けられた関数またはプロパティです。Python のすべてがオブジェクトであり、これらすべてのオブジェクトにはいくつかの属性を持つクラスがあります。。
を使用してこのようなプロパティにアクセスできますオペレーター。
このチュートリアルでは、Python での object has no attribute
エラーについて説明します。このエラーは 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'
上記の例では、メッセージを表示するための同様の機能で 2つのクラスが開始されました。呼び出された関数が 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