Python - 引用对象属性

时间:2012-10-20 19:24:24

标签: python oop

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

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

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

所以,我可以

component1.positive = node1

但如果我也想做

node1.add_terminal( component1.positive )

这只会给node1一个自己的引用。

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

node1.add_terminal( component1, "positive")

或类似的东西。

那么,有没有办法存储“component1.positive”,以便可以追溯到组件和该组件的特定终端?或者有另一种方式来表示这种多对一和一对多的关系吗?

编辑:

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

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