2013-03-31 4 views
1

글쎄, 내 질문에 이미 이전에 요청한 것 같지만 실제로 검색 할 용어를 모르므로 중복 된 경우 사과합니다.Python : 가져 오기 클래스에서 메서드 호출

제 질문은 현재 클래스의 인스턴스를 만드는 클래스에서 메서드를 호출하는 방법입니까? 예를 들어, 우리는이 :

class First: 
    def __init__(self): 
     self.text = "This is a text in First class" 
     self.second = Second() 

class Second: 
    def __init__(self): 
     print "How to show self.text from First?" 

지금이 권리를하고 있어요 방법은 Second 클래스, self.second = Second(self)을 시작할 때 인자로 클래스 First에서 self을 전달하는 것입니다 그러나 이것은 올바른 방법입니다 있는지 확실하지 않습니다 . 또한 Second의 서브 클래스를 First의 하위 클래스로 만들면 가능하다는 것을 알았지 만, 이것이 올바른지 확실하지 않습니다.

답변을 도와 주시겠습니까? 이런 식으로 서로를 알아

class First: 
    def __init__(self): 
     self.text = "This is a text in First class" 
     self.second = Second(self) 

class Second: 
    def __init__(self, first): 
     self.first = first 
     print "How to show self.text from First?" 
     print self.first.text 

개체 내가 두려워 law of demeter을 위반하거나 하드 구별 할 수 있도록 가능성이 속성 서로를 사용 는

+0

귀하의 질문을 이해한다면, 먼저 상속받을 것입니다. –

+1

1) 실제 문제는 무엇입니까? 임의의 클래스에 대해서는 어떤 해결책이라도 괜찮습니다. 2) 수업이 아니라 객체를 생각하십시오. –

+0

@AdityaSihag - First In Seconds에서 속성 및 메서드에 액세스하려고합니다. 예를 들어, Second에서 몇 가지 작업이 First에서 콜백을 호출해야한다고 가정 해 보겠습니다. – ov1d1u

답변

3

을이 당신이 그것을 할 수있는 방법을 감사합니다 서로. 그들을 구별하는 것은 "좋은"수업을 작성하는 데 매우 중요합니다. 그래서 조심해서 다루십시오!

다른 솔루션 : 패스 텍스트 :이 또한 아주 괜찮

class First: 
    def __init__(self): 
     self.text = "This is a text in First class" 
     self.second = Second(self.text) 

class Second: 
    def __init__(self, text): 
     self.text = text 
     print "How to show self.text from First?" 
     print self.text 

. 첫 번째 해결 방법보다 더 원합니다. 그러나 더 많은 인수가 올 때 text1, text2, text3, ...이 새로운 객체가 될 수 있습니다.

class First(object): 
    @property 
    def text(self): 
     "get text from self.second" 
     return self.second.text 

    def __init__(self): 
     self.second = Second("This is a text in First class") 
     print self.text 

class Second: 
    def __init__(self, text): 
     self.text = text 
     print "How to show self.text from First?" 
     print self.text 

나는 텍스트를 동기화하는 데에도 좋은 해결책이라고 생각합니다. 그러나 나는 정말로 그것을 필요로하는 예를 생각할 수 없다.

+0

이것은 내가 지금하고있는 방식입니다. 제 질문은 실제로 이것이 좋은 방법인지, 아니면 이것을 달성하는 더 좋은 방법이 있는지입니다. – ov1d1u

+0

더 많은 방법을 추가했습니다 .. – User

관련 문제