Python TypeError: 必要な位置引数が 1つありません

Manav Narula 2023年6月21日
  1. Python でオブジェクトをインスタンス化しない
  2. Python でクラス オブジェクトを誤ってインスタンス化する
  3. TypeError: missing 1 required positional argument: 'self' エラーを Python で修正する
  4. まとめ
Python TypeError: 必要な位置引数が 1つありません

クラスは、オブジェクト指向プログラミング言語の基本的な機能の 1つです。 すべてのオブジェクトは、Python のいくつかのクラスに属しています。

クラスを設計図として作成して、同じタイプのオブジェクトを作成できます。 class キーワードを使用して、Python でクラスを定義します。

Python の非常に重要な機能は、クラスを定義する際に self 属性を使用することです。 self 属性は、オブジェクトのデータを表し、引数をオブジェクトにバインドします。

このチュートリアルでは、Python の TypeError: missing 1 positional argument: 'self' エラーとその解決方法について説明します。

このエラーが発生する状況について説明しましょう。

Python でオブジェクトをインスタンス化しない

位置引数は、関数に提供するデータを参照します。 クラス オブジェクトを作成するには、コンストラクターを使用します。

クラスにデータが必要な場合は、コンストラクター関数で引数として渡す必要があります。

このエラーは、クラス オブジェクトをインスタンス化するのを忘れた場合、またはクラス インスタンスを誤ってインスタンス化した場合に発生します。

以下のコードを参照してください。

class Delft:
    def __init__(self, name):
        self.name = name

    def fun(self):
        return self.name


m = Delft.fun()
print(m)

出力:

TypeError: fun() missing 1 required positional argument: 'self'

上記の例では、クラスのインスタンスをインスタンス化するのを忘れて、クラスの関数にアクセスしようとしたため、エラーが発生しました。 その結果、self 属性は定義されておらず、属性をオブジェクトにバインドできません。

これは TypeError であることに注意してください。これは、特定のデータ型に対してサポートされていない操作を実行しているときに Python で発生します。 インスタンスを作成せずにクラス メソッドに直接アクセスすることはサポートされていません。

Python でクラス オブジェクトを誤ってインスタンス化する

このエラーが発生する別のシナリオは、クラス オブジェクトを誤ってインスタンス化した場合です。 これは、括弧を無視したり、引数を指定しないなどの小さな入力エラーである可能性があります。

例えば:

class Delft:
    def __init__(self, name):
        self.name = name

    def fun(self):
        return self.name


m = Delft
a = m.fun()
print(a)

出力:

TypeError: fun() missing 1 required positional argument: 'self'

以下のセクションで、このエラーを修正する方法について説明しましょう。

TypeError: missing 1 required positional argument: 'self' エラーを Python で修正する

このエラーを修正するには、クラス インスタンスを作成し、それを使用してクラス メソッドにアクセスします。

以下のコードを参照してください。

class Delft:
    def __init__(self, name):
        self.name = name

    def fun(self):
        return self.name


m = Delft("Stack")
a = m.fun()
print(a)

出力:

Stack

この例では、最初にクラスのインスタンスを作成します。 次に、これを使用してクラス メソッドにアクセスし、何らかの値を返して出力します。 エラーは修正されました。

別の修正には、静的メソッドの使用が含まれます。 静的メソッドは、オブジェクトではなく特定のクラスにバインドされた関数です。

@staticmethod デコレーターを使用して、そのようなメソッドを作成できます。

例えば:

class Delft:
    def __init__(self, name):
        self.name = name

    @staticmethod
    def fun(abc):
        return abc


a = Delft.fun("Stack")
print(a)

出力:

Stack

上記の例では、fun() 関数を静的関数に変更しました。 このようにして、クラス オブジェクトをインスタンス化せずに使用できます。

まとめ

このチュートリアルでは、Python の TypeError: 必要な位置引数が 1つありません: 'self' エラーと、その解決方法について説明しました。

このエラーが発生する状況と、クラスのオブジェクトをインスタンス化してエラーを修正する方法について説明しました。 静的メソッドを使用してこのエラーを回避することもできます。

著者: 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 TypeError

関連記事 - Python Error