0

ここでは可能性の範囲外のことをしようとしているのかもしれませんが、希望を捨てる前にまず質問しようと思いました. それで、ここに行きます...

A と B の 2 つのクラスがあります。各クラスには任意の数の関数があります。クラス B はクラス A のどこかでインスタンス化され、クラス A はそのインスタンス化を介してクラス B 機能の 1 つを利用します。クラス B の関数は、クラス A の現在のインスタンス化データを使用して、1 つ以上のクラス A の関数を参照する必要があります。

クラスA

#!/usr/bin/python
from classB import classB


class classA(object):
    def Apple(self):
        print("Inside Apple")
        b = classB()
        b.Banana()
        b.bar()

    def foo(self): 
        print("foo inside apple")


a = classA()
a.Apple()

クラス B:

#!/usr/bin/python
import inspect


class classB(object):
    def Banana(self):
        print("Inside banana")

    def bar(self):
        print("bar inside banana")

        ''' 
        The following lines just show I can get the names of the
        calling class and methods.
        '''
        stack = inspect.stack()
        the_class = stack[1][0].f_locals["self"].__class__
        the_method = stack[1][0].f_code.co_name
        print("Caller Class: {}".format(the_class))
        print("Caller Method: {}".format(the_method))

        function_name = 'foo'
        if hasattr(the_class, function_name):
            print("Class {} has method {}".format(the_class, 
            function_name))
            getattr(the_class, function_name)()

次のエラーが表示されます。

getattr(the_class, function_name)()

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

ありがとう!

4

1 に答える 1