1. ホーム
  2. Python

Pythonのselfの使い方を詳しく、または常にプロンプトを表示します。TypeError: add() missing 1 required positional argument: 'self' 問題は解決されました。

2022-02-19 04:42:15

最近、Pythonの勉強をしていて、Web上で他の人が書いたサンプルやオープンソースプロジェクトを見ていて、ある問題に気づきました。クラスやクラスメソッドを呼び出すときに、必ず渡すべきパラメータが足りないというプロンプトが表示されるのです。私自身は以下のような簡単な類似の問題を書きました。

class Add():

    def add(self):
        return None

if __name__ == '__main__':

    print(Add.add())

<イグ

この時点で、add (self) から self を実際に削除してみると、システムからエラーが報告されることがわかります。

今度は引き続きadd(str1)に修正し、呼び出されたときに文字列を渡しますが、これも問題ありません

実はこの書き方は問題で、最初にprint(Add.add('aaa'))と書いても実際にはクラスはインスタンス化されていないので、使うときにprint(Add().add('aaa'))と書いて、その後もprint(Add().add('aaa'))と修正して、修正後に実行したらまたエラーが報告されることに気がつくのです

ヒントは1つの引数を取るが、2つの引数を渡す。なぜなら、def add(str1) は def add(self) と等価であり、順番に自身のインスタンスを表すからである。しかし、add('aaa')の呼び出しでは、彼に別の引数を渡しており、これはadd('self', 'aaa')と同等なので、エラーも報告される。そして、それを修正し続け、正確に正しい方法で記述してください。

つまり、要約すると、関数やクラスを定義するときは、add(self, str, str1) のようにデフォルトで第一引数に self を追加し、クラスを呼ぶときは Add().add('aaa') のように Add.add('aaa') を直接呼ばずにまずインスタンス化するべきなのである。

selfの使用方法の詳細については、以下のようにまとめていますので、アクセスしてみてください。 https://blog.csdn.net/CLHugh/article/details/75000104 踏み込んだ内容を深く理解することができます。