我一直在高低寻找答案,似乎找不到答案。尝试从另一个文件导入类时,我遇到了一个基本问题。我对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类。为什么这不起作用?
我见过人们引用整个'名称'=='主要'但我真的不知道如何实现它,我觉得好像有一种更简单的方法。
任何帮助将不胜感激。谢谢!
答案 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()