2

我的问题实际上是关于由父类创建的两个对象如何相互通信。我的真实用例是一个 PySide GUI 应用程序,其中两个位于 CentralWidget 上的小部件需要连接一个信号和插槽。

然而,这个问题比这更普遍,所以我有一个愚蠢的例子来证明这个问题。

特别是 Son 中的“asksister”方法,我知道父母有一个女儿,我需要连接这两个方法。但是,通过硬链接连接,意味着我无法在不创建整个对象结构的情况下运行单元测试。

有没有更好的办法?

如果我在这里发布我的真实代码(简化后)会不会那么蹩脚

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

我认为很难用一个通用的例子来做出结论性的回答,比如你提出的那个。关键是这两个对象必须交互,它们的布局和通信取决于域和它们所代表的实体。不同的设计策略可能同样有效,一种比另一种更适合特定情况。

如果是在我身上,我会注册姐妹和兄弟,而将父母排除在交流之外,但同样,这是一种设计。如果姐妹和兄弟是一个视图和一个模型,而父级是一个控制器,我会让他们都只与控制器对话。

另一种选择是让 Son 请求一个 helpService,而姐姐之前注册为 helpProvider。这样,儿子肯定知道了helpService,间接得到了妹妹。

于 2012-06-28T08:24:39.033 回答