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