【python3】missing 1 required positional argument: ‘self’の解決法

missing 1 required positional argument: ‘self’が起きた状態

pycharmでdjangoでクラスのお作法を勉強中のときに起きた出来事。
python3使ってました。下記ソースコードを実行すると
「missing 1 required positional argument: ‘self’」と怒られる。


class Test():
def test(self):
print('test')

def test()としたいところだが「self」をつけろと警告を受ける。
しかたなくつけるが別の問題が発生する。

下記ソースコードはhogeディレクトリの中でtest.py
Testクラスのtest関数を呼び出す処理です。


from hoge.test import Test as t

t.test()

上記ソースコードを実行すると
「missing 1 required positional argument: ‘self’」
のエラーが発生する。引数が設定されているにもかかわらず引数を設定していないからだ。

安易に回避するなら適当に引数を入れればいい。
t.test('')

これではダサすぎる。
別の方法を模索してたどり着いたのがこれ!!

missing 1 required positional argument: ‘self’を解決方法


class Test():
@classmethod
def test(self):
print('test')

「@classmethod」をつけてあげればいい。
そうすれば「t.test()」で読んでもエラーはでない。

クラスメソッドの場合は第一引数に子クラスが渡されるため引数を入れる必要がない。