10

私は持っています:

メインスクリプト:

import music.umm

UMM = music.umm.UMM()
UMM.read_information()

モジュールスクリプト:

class UMM(object):
    
    def read_information(self):
        # ..some code
        UMM.login()

UMM = UMM()

このコードでは、メイン スクリプトを実行すると次のエラーが発生します。

TypeError: 'UMM' オブジェクトは呼び出し可能ではありません

どうすれば修正できますか?

モジュールから次の行を削除します。

UMM = UMM()

ここで、メイン スクリプトが関数モジュールを実行しますが、スクリプト モジュールが別の関数に移動すると、次のエラーが発生します。

TypeError: unbound メソッド login() は、UMM インスタンスを最初の引数として呼び出す必要があります (代わりに何も取得しません)

4

5 に答える 5

8

SSCCE は次のようになります。

うーん.py:

class UMM(object):
    def login(self):
        print("login()")

    def read_information(self):
        print("read_info() 1")
        UMM.login()
        print("read_info() 2")

メインスクリプト:

import umm
umm = umm.UMM()
umm.read_information()

私はそれをテストしませんでしたが、これにより正確に次の例外が発生すると思います

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

その理由はUMM.login()、オブジェクトのインスタンスを介して呼び出されることを期待するメソッドだからです。

内部read_information()にはself、具体的なオブジェクト インスタンスがあります。したがって、呼び出しを置き換えることができます

UMM.login()

self.login()

すべての依存関係を満たすために。

への呼び出しは、処理するオブジェクト インスタンスなしでUMM.login()呼び出そうとします。login()これは a@staticmethodまたは a@classmethodで機能しますが、通常のバインドされたメソッドでは機能しません。

于 2013-11-03T15:14:40.073 に答える
0

classクラスを定義するための予約済みキーワードです。

クラスに別の名前を付けてみてください。

class YourClass(object):
    ..functions..

次に、次のように初期化します。

var_class = YourClass()
于 2013-11-03T12:04:02.307 に答える