2013-12-19 95 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()