2013-12-19 121 views
1

我一直在尋找答案,並且似乎無法找到答案。試圖從另一個文件導入類時,我遇到了一個基本問題。一般來說,我對Python和OOP比較陌生,所以如果我的查詢是基本的,請原諒我。Python 2.7:導入類時出現問題

問題:我想將一個CHILD類導入PARENT類。很簡單,但是當我導入類時,它立即執行。

問題:如何導入一個類,以便它可以在我的父類中全局引用?

這裏是父類的一個基本的例子:

from child import CHILD 

class PARENT: 

    def _init_(self): 

     print "START PARENT CLASS" 

    def goTo(self,enter): 

     if enter == "1": 

      c.childScreen() 

     else: 

      self.parentScreen(self): 

    def parentScreen(self): 

     enter = raw_input("ENTER [1] to go to CHILD class:") 
     self.goTo(enter) 

p = PARENT() 
c = CHILD() 

好了,所以我的眼睛初學者這在概念上應該工作。我導入了CHILD類並創建了對它的引用「c = CHILD」。當兩個類都在同一個文件中時,這個概念是有效的,但當它們在兩個不同的文件中時,這個概念不起作用爲什麼?

從孩子中導入CHILD並將其存儲爲引用,而不是立即執行並且不啓動PARENT類。爲什麼這不起作用?

我看到有人引用整體「」 ==「主要」,但我真的不知道如何實現這一點,我覺得如果有一個更簡單的方法。

任何幫助,將不勝感激。謝謝!

回答

1

您正在導入CHILD類,但是您從PARENT類之外調用它。 PARENT類認爲變量c是函數goTo的局部變量。你可以使用全局變量c,但任何人都會告訴你,這是一個很大的否定。

要回答你的其他問題,你可能有一些代碼在CHILD執行。如果你只想要這個代碼在運行該文件運行,其中CHILD類,然後把它放在後

if __name__ == '__main__': 

這僅允許前,如果直接執行它來運行代碼,它將無法運行,如果你進口班上。見下面的例子。

您可以在您的__init__中創建一個CHILD類的實例變量,並將其用於PARENT類的其餘部分。

class PARENT(object): 

    def _init_(self): 

     print "START PARENT CLASS" 
     self.c = CHILD() # create instance of CHILD 

    def goTo(self,enter): 

     if enter == "1": 

      self.c.childScreen() # then you can access CHILD class like this 

     else: 

      self.parentScreen(self): 

    def parentScreen(self): 

     enter = raw_input("ENTER [1] to go to CHILD class:") 
     self.goTo(enter) 


if __name__ == '__main__': 
    p = PARENT() 

,或者你可以actaully繼承子成家長:

class PARENT(CHILD): 

    def _init_(self): 

     print "START PARENT CLASS" 


    def goTo(self,enter): 

     if enter == "1": 

      # now you can access the CHILD functions as if the we were coded in the 
      # PARENT class 
      self.childScreen() 

     else: 

      self.parentScreen(self): 

    def parentScreen(self): 

     enter = raw_input("ENTER [1] to go to CHILD class:") 
     self.goTo(enter) 

if __name__ == '__main__': 
    p = PARENT()