Python TypeError: 必要な位置引数が 1つありません
- Python でオブジェクトをインスタンス化しない
- Python でクラス オブジェクトを誤ってインスタンス化する
-
TypeError: missing 1 required positional argument: 'self'
エラーを 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'
エラーと、その解決方法について説明しました。
このエラーが発生する状況と、クラスのオブジェクトをインスタンス化してエラーを修正する方法について説明しました。 静的メソッドを使用してこのエラーを回避することもできます。
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 TypeError: List Indices Must Be Integers, Not List を修正する
- Python TypeError: Unhashable タイプ: リスト
- TypeError を解決する: Python での文字列の書式設定中にすべての引数が変換されるわけではありません
- TypeError を解決する: Python では整数が必要です
- TypeError: STR ではなく、実数でなければなりません
関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません