2
class MyClass(object):
    def f(self):
        return 'hello world'

私がここや他のウェブサイトで読んでいるすべてのものは、このコードを使用すると、実行MyClass.f()すると元に戻るはずですhello worldが、代わりに取得し続けます

Traceback (most recent call last):
  File "C:\Users\Calvin\Desktop\CS_Semester_Project\testing.py", line 5, in <module>
    MyClass.f()
TypeError: unbound method f() must be called with MyClass instance as first argument (got nothing instead)

何が間違っているのかわかりません。助けていただければ幸いです。

4

2 に答える 2

2

これを行う:

myCls = MyClass()
myCls.f()

静的関数のように呼び出すときにメソッドにインスタンスが必要であるというエラーとして、メソッドセクションのチュートリアルでPythonクラスの詳細を読むことができます

于 2013-03-26T06:09:00.877 に答える
2

エラーは、それ自体ではなく、タイプのインスタンスf()で呼び出す必要があることを示しています。MyClassMyClass

次のインスタンスを作成する必要がありますMyClass

obj = MyClass()

この場合obj、のインスタンスになりますMyClass

f()次に、そのオブジェクトを呼び出す必要があります。

obj.f()

Pythonでメソッドが呼び出される方法が原因で、エラーメッセージは混乱を招きます。を呼び出すとobj.f()、最初の引数としてobj暗黙的にに渡されます。f()だからあなたは書く必要があります

def f(self):
    ...

selfobjを呼び出すときに参照しますobj.f()

それを知って、あなたがエラーメッセージをもう一度見るならば:

TypeError: unbound method f() must be called with MyClass instance as first argument (got nothing instead)

それはもっと理にかなっています。それはf()、引数(具体的にはのインスタンス)を期待していて、型のインスタンスではなくMyClassでそれを呼び出そうとしたため、引数を取得しなかったと言います。

于 2013-03-26T06:15:01.973 に答える