gpt4 book ai didi

python - 面向对象设计在 python 中。上上下下?

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:14 24 4
gpt4 key购买 nike

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

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

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

有没有更好的办法?

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

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()

最佳答案

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

如果是在我身上,我会注册姐姐和弟弟,让 parent 无法沟通,但同样,这是一个设计。如果 sister 和 brother 是 View 和模型,父对象是 Controller ,我会让他们都只与 Controller 对话。

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

关于python - 面向对象设计在 python 中。上上下下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com