Python-引用对象属性

Python-引用对象属性,python,oop,Python,Oop,我正在做一个项目,试图代表一个电子电路。这个问题不涉及电路理论,只涉及对象之间的连接 问题是我需要以两种不同的方式在两个对象之间建立连接 我有一个组件和一个节点。元件有两个端子(正极和负极),每个端子都连接到一个节点。一个节点可以有许多不同的终端连接到它 所以,我可以 component1.positive=node1 但是如果我也想做的话 node1.添加终端(组件1.positive) 这只会给node1一个自身的参考 我希望节点能够包含连接到它或引用它的组件的终端集合,而无需编写 node

我正在做一个项目,试图代表一个电子电路。这个问题不涉及电路理论,只涉及对象之间的连接

问题是我需要以两种不同的方式在两个对象之间建立连接

我有一个组件和一个节点。元件有两个端子(正极和负极),每个端子都连接到一个节点。一个节点可以有许多不同的终端连接到它

所以,我可以

component1.positive=node1

但是如果我也想做的话

node1.添加终端(组件1.positive)

这只会给node1一个自身的参考

我希望节点能够包含连接到它或引用它的组件的终端集合,而无需编写

node1.添加终端(组件1,“正极”)

或者类似的东西

那么,有没有一种存储“component1.positive”的方法,这样就可以跟踪到某个组件和该组件的特定终端?或者有没有其他方法来表示这种多对一和一对多的关系

编辑:


重要的是,节点对象可以分辨它连接到组件的两个端子中的哪一个。

您可以使用属性。考虑这个(更新):

用法:

c = Component()
n = Node()

c.positive = n # at this point c.positive.connect(n) thus
               # n.add_terminal(c.positive) is called 
del c.positive # at this point positive is "disconnected" 
               # from the node and vise-versa.
# or disconnect explicitly
c.positive.disconnect()

简言之,你不能。没有对对象属性的引用,只有对对象的引用。实际上,您必须将对象存储为表示该对象中存储位置的标识符(不必是作为属性名的字符串,也可以是作为成员的字典的键,或者是列表中的索引)


但是,您不一定需要这些信息。以不同的方式对这些关系进行建模可能更有意义,和/或不向对象本身提供这些知识,而是将它们视为一个图,并在该图上执行遍历。这可以让您了解每个引用的端点,而无需显式记录它。

是否可以选择将节点设置为字典或列表?这基本上是我第一次尝试解决这个问题。问题是,节点不知道它连接到组件的哪个终端。应该只有一个节点连接到一个终端,使用此代码,可以至少有两个节点引用相同的组件,而不是组件终端。但是,我认为在setter中调用node对象的代码是非常干净的。@KevinWard,在本例中,在
node.add_terminal(t)
中执行一个check,检查终端是否连接到另一个节点。我会在一分钟内更新代码。我也用了类似的方法来更新一个终端类,但我不太清楚如何将它们清晰地链接在一起。你的模式看起来很稳健。我要做的唯一一件事就是检查引用的终端是否与
component.positive
component.negative
处的引用相同。谢谢你的帮助!不客气!感谢您发布了一个有趣的问题:)
c = Component()
n = Node()

c.positive = n # at this point c.positive.connect(n) thus
               # n.add_terminal(c.positive) is called 
del c.positive # at this point positive is "disconnected" 
               # from the node and vise-versa.
# or disconnect explicitly
c.positive.disconnect()