Python で Object Has No Attribute エラーを修正する

Manav Narula 2022年12月21日
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 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