让一个类的每个实例都知道另一个类的一个特定实例的最佳方法是啥?

Posted

技术标签:

【中文标题】让一个类的每个实例都知道另一个类的一个特定实例的最佳方法是啥?【英文标题】:What is the best way to make every instance of a class know about one particular instance of another class?让一个类的每个实例都知道另一个类的一个特定实例的最佳方法是什么? 【发布时间】:2019-10-27 13:05:16 【问题描述】:

提前感谢您的帮助,有点像业余爱好者,正在尝试使用 OOP 完成我的第一个大型项目。

我有四门课。其中三个类总是需要知道另一个类的一个特定实例。

我认为继承是我的问题的解决方案,但很快意识到它不是 - 我认为聚合更合适?谁能告诉我这是否是最合适的实现方式?

class Foo:
    def __init__(self, some_data):
        self.data = some_data

class Bar:
    def __init__(self, foo_instance):
        self.foo = foo_instance

class Fizz:
    def __init__(self, foo_instance):
        self.foo = foo_instance

class Wizz:
    def __init__(self, foo_instance):
        self.foo = foo_instance

foo = Foo("foobar")
bar = Bar(foo)
fizz = Fizz(foo)
wizz = Wizz(foo)

或者我应该在 Foo 类中定义 Bar、Fizz 和 Wizz 类吗?

【问题讨论】:

【参考方案1】:

这取决于您想要达到的目标。成员表示关系。那么FooBar 还是BarFoo

例如,Pet 是否有所有者 (Person) 或 Person 是否有 Pet?归根结底是您必须要做的事情:您是否必须知道Pet 的所有者是谁,或者您是否想知道PetPerson 拥有什么。

【讨论】:

感谢您的回复!每个BarFizzWizz 都需要知道他们都属于哪个Foo。一个Foo 有多个Bars、Fizzes、Wizzes,但它们都可以独立于Foo 存在——(我认为)

以上是关于让一个类的每个实例都知道另一个类的一个特定实例的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何为类的每个实例创建实例特定的方法?

验证域类的实例是唯一的

实现具有自动递增实例属性的类的最 Pythonic 方式是啥?

在 C# 中,使一个类的一个实例包含另一个类的实例的集合

如何向 Qt 中 QThread 类的特定对象发出信号?

$.toggle() 一个类的所有实例