2个模块之间的导入错误

我是Python的新手,正在从教程中学习
我创建了2个.py文件,如下
empmodule.py
------------
从工人模型导入工人
班级雇主:
def __init __(self,n):
self.name = n
self.worker = worker()
def getEmployername(self):
返回self.name
def callworker(self,消息):
self.worker.answercall(消息)
如果__name__ ==" __ -main __":
EMP =雇主()
emp.callworker("工作报告")
workmodule.py
------------------------
来自EmpModule进口雇主
班级工作人员:
def __init __(自我):
self.emp =雇主()
DEF AnswerCall(self,msg):
打印"工人:"+msg+"收到
来自:"+self.emp.getEmployername()
Python不允许这种相互进口吗?
我正进入(状态
"从工人模型导入工人
Importerror:无法导入名称工人"
任何建议/指针最欢迎
谢谢
吉姆

# 回答1


Jimgardener写道:
您正在进行循环进口.这是您可以做的一些事情:
#1.导入模块名称,而不是其中的定义.例如:
导入EmpModule
..... .....
self.emp = empmodule.employer()
#2.将两个类放在同一文件中
顺便说一句,您的程序在语义上必须是错误的.当您创建一个
雇主实例从您的主要程序中,它将尝试创建一个工人
在其强制器中:
self.worker = workmodule.worker()
创建工人时,它试图在其中创建雇主
强制:
self.emp = empmodule.employer()
这些构造函数将永远互相呼唤.这将是一个
无限递归.最后,未完成构造函数的电话,并且
您不会创建任何对象,而是达到递归限制.
最好的,
laszlo
# 回答2


LE 2008年8月27日星期三12:38:33 Jimgardener,VousAvezécrit*:
对于这种情况,您可以直接在__init__ func中进行进口并观看
您在行动中做的无限循环!
empmodule.py
------------
从工人模型导入工人
班级雇主:
def __init __(self,n):
self.name = n
self.worker =工人(self)
def getEmployername(self):
返回self.name
def callworker(self,消息):
self.worker.answercall(消息)
如果__name__ ==" __ -main __":
EMP =雇主()
emp.callworker("工作报告")
workmodule.py
------------------------
班级工作人员:
def __init __(自我,雇主):
来自EmpModule进口雇主
如果不是Isinstance(雇主,雇主):
提高价值Error("不是雇主")
self.emp =雇主()
- -
_____________
Maric Michaud
# 回答3


8月27日,下午5:37,laszlo Nagy 抱歉,这对我来说是一个非常愚蠢的错误.
出去..
吉姆
# 回答4


Jimgardener写道:
是的,但是您需要了解事物的工作原理,然后才能使用它
没有陷入麻烦.此页面可能会有所帮助:http://effbot.org/zone/import-confusion.htm
请参阅"循环导入"部分以讨论正在发生的事情
在这里,以及"我应该使用哪种方式"作为指南(支付特殊费用
注意该列表中的最后一项;-)

标签: python

添加新评论