Python 2.7:导入类时的问题

时间:2013-12-19 21:18:44

标签: class python-2.7 import parent python-import

我一直在高低寻找答案,似乎找不到答案。尝试从另一个文件导入类时,我遇到了一个基本问题。我对Python和OOP相对较新,所以请原谅我,如果我的查询很简单。

问题:我想将CHILD类导入PARENT类。很简单,但是当我导入类时,它会立即执行。

问题:如何导入一个类,以便可以在我的父类中全局引用它?

以下是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 个答案:

答案 0 :(得分: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()

或者您可以将CHILD继承为PARENT:

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