2012-10-20 2 views
0

전자 회로를 나타내는 프로젝트에서 작업 중입니다. 이 문제는 회로 이론을 다루지 않고 단지 객체 들간의 연결을 다루고 있습니다.Python - 객체 속성에 대한 참조 만들기

문제는 서로 다른 두 가지 방법으로 두 개체 사이를 연결해야한다는 것입니다.

구성 요소와 노드가 있습니다. 구성 요소에는 두 개의 터미널 (양수 및 음수)이 있으며 각 노드는 노드에 연결됩니다. 노드에는 여러 가지 터미널이 연결될 수 있습니다.

그래서,

component1.positive = node1

을 가질 수 그러나 내가 원하는 경우에도 단지 자체에 대한 참조 노드 1 줄 것

node1.add_terminal(component1.positive)

을 할 수 있습니다.

나는 비슷한

node1.add_terminal(component1, "positive")

또는 무언가를 작성하지 않고도, 노드가 구성 요소에 연결하거나 참조하는 어떤 단말기의 컬렉션을 포함 가질 수 있도록하고 싶습니다.

그래서 "component1.positive"를 저장하는 방법이 있습니까? 그렇다면이 구성 요소와 해당 구성 요소의 특정 터미널을 다시 추적 할 수 있습니까? 또는이 다 대일 및 일대 다 관계를 나타내는 또 다른 방법이 있습니까?

편집 :

그것은 노드 객체가 연결 된 구성 요소의 두 단자 중 어느 말할 수있는 것이 중요합니다.

+0

노드를 사전이나 목록으로 만드는 옵션이 있습니까? – Difusio

답변

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

기본적으로 문제의 첫 번째 찌르기입니다. 문제는 노드가 연결되어있는 구성 요소의 터미널을 알 수 없다는 것입니다. 터미널에는 하나의 노드 만 연결되어 있어야하며이 코드를 사용하면 구성 요소 터미널이 아닌 동일한 구성 요소를 참조하는 노드가 최소한 두 개 이상있을 수 있습니다. 그러나 setter 노드 객체에 대한 코드를 호출하는 것은 매우 깨끗하다고 ​​생각합니다. –

+0

@KevinWard,이 경우 터미널이 다른 노드에 연결되어 있는지 여부를'Node.add_terminal (t) '에서 확인하십시오.잠시 후에 코드를 업데이트하겠습니다. –

+0

답변을 업데이트했습니다. 훨씬 더 좋아 보인다 :) –

0

을, 당신은 할 수 없습니다. 객체 속성에 대한 참조는 없으며 객체에 대한 참조 만 존재합니다. 실제로 객체의 저장 위치를 ​​나타내는 식별자를 객체에 저장해야합니다 (속성 이름 인 문자열이거나 구성원 인 사전의 키가 될 필요는 없으며 색인 목록으로).

그러나 정보가 반드시 필요한 것은 아닙니다. 이러한 관계를 다르게 모델링하거나 지식을 객체 자체에 부여하지 않고 그래프로 처리하고 그래프를 통해 트래버스를 수행하는 것이 더 적합 할 수 있습니다. 이렇게하면 명시 적으로 기록하지 않고도 각 참조의 끝점을 알 수 있습니다.

관련 문제