0

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

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

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

所以,我可以拥有

component1.positive = node1

但如果我也想做

node1.add_terminal( component1.positive )

那只会给 node1 一个对自身的引用。

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

node1.add_terminal( component1, "positive")

或类似的东西。

那么,有没有办法存储“component1.positive”,以便可以将其返回到组件和该组件的特定终端?还是有另一种方式来表示这种多对一和一对多的关系?

编辑:

重要的是 Node 对象可以告诉它连接到的组件的两个终端中的哪一个。

4

2 回答 2

1

您可以使用属性。考虑一下(更新):

class Terminal(object)
    def __init__(self, component, node = None):
        self.component = component
        self.node = node

    def connect(self, node):
        node.add_terminal(self)
        self.node = node

    def disconnect(self):
        self.node.remove_terminal(self)
        self.node = None       

class Component(object):
    def __init__(self):
       self._positive = Terminal(self)

    @property
    def positive(self):
        return self._positive

    @positive.setter
    def positive(self, node):
        self._positive.connect(node)

    @positive.deleter
    def positive(self):
        self._positive.disconnect()

用法:

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()
于 2012-10-20T19:31:15.123 回答
0

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

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

于 2012-10-20T19:35:55.040 回答