HOWTO · Python
Python TypeError: 必要な位置引数が 1つありません
このチュートリアルでは、TypeError: missing 1 required positional argument: self in Python について説明します。
このページの内容
クラスは、オブジェクト指向プログラミング言語の基本的な機能の 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' エラーと、その解決方法について説明しました。
このエラーが発生する状況と、クラスのオブジェクトをインスタンス化してエラーを修正する方法について説明しました。 静的メソッドを使用してこのエラーを回避することもできます。