1
 class Method(object):
     def __call__(self):
         #how could I get the App instance here?
         return True

 class App(object):
     def __init__(self):
         self.g = Method()

ご覧のとおり、上記のコードで私の質問を説明できます。

4

1 に答える 1

2

メソッド内の App オブジェクトへのポインターを保存する必要があります。

class Method(object):
    def __init__(self, app):
        self.app = app

    def __call__(self):
        self.app.something()
        return True

class App(object):
    def __init__(self):
        self.g = Method(self)

App でポインターを渡さないようにする必要がある場合は、self代わりにスタックを調べて取得する必要があります。

以下は推奨されておらずMethod、 のメソッドでオブジェクトAppをインスタンス化する場合にのみ機能します。

import sys

class Method(object):
    def __init__(self):
        parent = sys._getframe(1) # Calling context
        locals_ = frame.f_locals
        assert ('self' in locals_,
            'Method objects can only be instanciated inside instance methods')
        self.app = locals_['self']
于 2012-07-18T10:50:30.827 に答える