1. ホーム
  2. python

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

2022-02-26 10:40:32

質問

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 バウンドメソッド は、オブジェクトのインスタンスにアタッチされるものです。また 非結合メソッド は、もちろん ではない インスタンスにアタッチされます。このエラーは通常、インスタンスではなくクラスに対してメソッドを呼び出していることを意味します。この場合、クラスをインスタンス化していなかったので、まさにそのようなことが起こっていたのです。