2013-03-31 43 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的一個子類來實現,但我仍然不確定這是否正確。

你能幫我解答嗎? 謝謝

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

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

對象是知道對方以這種方式,並使用對方的屬性,我擔心,有可能違反law of demeter或使其難以區分彼此。 爲了區分它們對於編寫「好」類非常重要。 所以小心處理!

其他的解決方案:通過文字:

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