繁体   English   中英

如果可以的话,在其中一个组件内访问 class 复合材料的正确方法是什么?

[英]What is the correct way to access a class composite inside one of its components, if that's even advisable?

假设我有这两个类:

class Branch():
    def __init__(self, id, leaves):
        self.id = id
        self.leaves = leaves
    
class Leaf():
    def __init__(self, color)
        self.color = color
    
    def describe()
        print("This leaf is " + color)

每个Leaf都属于一个Branch 无论是否有叶子, Branch都会继续存在,但是没有BranchLeaf就无法有意义地存在(撇开现实生活的逻辑不谈)。 这意味着我可以通过Branch.leaves属性轻松地从Branch中获取每一片Leaf 如果我正确理解了组合, Branch是组合, Branch.leaves中的每个Leaf都是它的组成部分之一?

但是,没有一个Leaf实际上知道它属于哪个Branch 所以,我不能让它打印“这片叶子是橙色的,属于分支#14 ”。 我可以添加一个Leaf.branch属性并在我初始化一个新的Leaf实例时传递它,看看一个Branch必须已经存在才能发生,但这对我来说似乎很错误,因为它看起来像Branch属于Leaf

问题是:在我的例子中,我描述的我不能做的最pythonic和正确的方法是什么? 我认为的感觉很不对,其实一点也不坏吗? 或者更确切地说,这个问题是由糟糕的设计引起的,我应该从另一个角度来看这个问题吗? 提前致谢。

在视图和子视图的复杂树中,每个单独的视图都有一个指向父视图和 window 的指针。 在菜单项和子菜单的复杂树中,每个项目都有一个指向顶部菜单的指针。 一个孩子知道它的父母或一个项目知道它的容器真的很常见。 没有它,有些设计是不可能的。

在必须担心 memory 管理的语言中,对父级的引用必须是弱引用,这意味着子级永远不必担心其父级的生命周期(反之则不然)。 即使在 Python 中,父级也拥有子级,它可以在需要时自由创建或删除,但显然,子级永远无法创建或删除其父级(因为它不知道自己的容器或所有者,所以无论如何它都无法这样做) )。

因此,这两个对象之间存在明确的层次关系,但这与它们是否可以相互认识无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM