1. ホーム
  2. python

[解決済み] 未束縛のメソッド f() は fibo_ インスタンスを第一引数として呼び出す必要がある (代わりに classobj インスタンスを取得)

2022-05-16 10:23:17

質問

Pythonで、クラス内のメソッドを実行しようとすると、エラーが発生します。

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

コード (swineflu.py)

class fibo:
    a=0
    b=0

    def f(self,a=0):
        print fibo.b+a
        b=a;
        return self(a+1)

スクリプト main.py

import swineflu

f = swineflu
fibo = f.fibo

fibo.f()            #TypeError is thrown here

このエラーは何を意味しているのでしょうか?このエラーの原因は何ですか?

どうすればよいのでしょうか?

OK、まず第一に、モジュールへの参照を別の名前にする必要はありません。 import からの) 参照が既にあるので、それを使えばいいのです。 もし別の名前が欲しければ、単に import swineflu as f .

次に、クラスをインスタンス化するのではなく、クラスへの参照を取得していることです。

だからこれは、そうでなければ

import swineflu

fibo = swineflu.fibo()  # get an instance of the class
fibo.f()                # call the method f of the instance

A バインドメソッド は、オブジェクトのインスタンスにアタッチされるメソッドです。また 非結合メソッド は、もちろん ではない はインスタンスにアタッチされていないものです。このエラーは通常、インスタンスではなくクラスに対してメソッドを呼び出していることを意味します。これは、クラスをインスタンス化していなかったため、まさにこのケースで起こっていたことです。