0

電子回路を表現しようとするプロジェクトに取り組んでいます。この問題は、回路理論ではなく、オブジェクト間の接続のみを扱います。

問題は、2 つのオブジェクトを 2 つの異なる方法で接続する必要があることです。

コンポーネントとノードがあります。コンポーネントには 2 つの端子 (プラスとマイナス) があり、それぞれがノードに接続されています。ノードには、多数の異なる端末を接続できます。

だから、私は持つことができます

component1.positive = node1

でもやりたいと思ったら

node1.add_terminal( component1.positive )

これは、node1 にそれ自体への参照を与えるだけです。

ノードに、どのコンポーネントのどのターミナルがそれに接続または参照するかのコレクションを含めることができるようにしたいと思います。

node1.add_terminal( component1, "positive")

または似たようなもの。

では、「component1.positive」を保存して、コンポーネントとそのコンポーネントの特定の端子に戻す方法はありますか? または、この多対 1 および 1 対多の関係を表す別の方法はありますか?

編集:

ノード オブジェクトが、コンポーネントの 2 つの端子のどちらに接続されているかを認識できることが重要です。

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 に答える