2

私の質問は、親クラスによって両方とも作成された 2 つのオブジェクトがどのように互いに通信できるかについてです。私が持っている実際の使用例は、CentralWidget にある 2 つのウィジェットが信号とスロットを接続する必要がある PySide GUI アプリケーションです。

ただし、問題はそれよりも一般的であるため、問題を示すためのばかげた例があります。

特に、Son の「asksister」メソッドでは、親に娘がいることがわかっており、これら 2 つのメソッドを接続する必要があります。ただし、接続をハードリンクすると、オブジェクト構造全体を作成せずにユニットテストを実行できなくなります。

より良い方法はありますか?

私が実際のコードをここに投稿した場合、それはそれほど不自由ではありませんか(単純化した後)

class Parent(object):
    def __init__(self):
        self.son = Son(self)
        self.daughter = Daughter(self)
        self.son.dohomework()


class Son(object):
    def __init__(self, parent):
        self.parent = parent

    def dohomework(self):
        print 'The answer is {0}'.format(self.asksister())

    def asksister(self):
        return self.parent.daughter.answer()


class Daughter(object):
    def __init__(self, parent):
        self.parent = parent

    def answer(self):
        return 42

if __name__ == '__main__':
    parent = Parent()
4

1 に答える 1

3

ご提示のような一般的な例で断定的にお答えするのは難しいと思います。要点は、これら 2 つのオブジェクトが相互作用する必要があり、それらのレイアウトと通信はドメインとそれらが表すエンティティに依存するということです。さまざまな設計戦略が等しく有効である場合があり、特定のケースでは一方が他方よりも適切に適合します。

私だったら妹と弟を登録して、親は通信から外しますが、これも一つの案です。姉妹と兄弟がビューとモデルであり、親がコントローラーである場合、代わりに両方ともコントローラーとのみ通信するようにします。

もう 1 つの方法は、Son に helpService を要求させることです。この場合、姉妹は以前に helpProvider として登録されていました。このように、息子は helpService を知っている必要があり、間接的に姉妹を取得します。

于 2012-06-28T08:24:39.033 に答える