好吧我有两个模块,每个模块包含一个类,问题是它们的类相互引用。Python模块依赖关系
比方说,我有一个房间模块和一个包含CRoom和CPerson的人模块。
CRoom类包含有关房间的信息和房间中每个人的CPerson列表。
但是,CPerson类有时需要使用CRoom类才能找到房间,例如找到房门,或者看看房间里还有谁。
问题是与两个模块导入互相我只是得到它曾经是被导入第二:(
在C++中我可以只包括头解决这一进口误差,因为在这两种情况下,类只是指向其他类,向前宣言将足以为标题,例如:
class CPerson;//forward declare
class CRoom
{
std::set<CPerson*> People;
...
反正有没有做到这一点在Python,不是将两个类在同一个模块或类似的东西在其他?
编辑:增加了Python示例使用上述类
显示问题错误:
Traceback (most recent call last):
File "C:\Projects\python\test\main.py", line 1, in
from room import CRoom
File "C:\Projects\python\test\room.py", line 1, in
from person import CPerson
File "C:\Projects\python\test\person.py", line 1, in
from room import CRoom
ImportError: cannot import name CRoom
room.py
from person import CPerson
class CRoom:
def __init__(Self):
Self.People = {}
Self.NextId = 0
def AddPerson(Self, FirstName, SecondName, Gender):
Id = Self.NextId
Self.NextId += 1#
Person = CPerson(FirstName,SecondName,Gender,Id)
Self.People[Id] = Person
return Person
def FindDoorAndLeave(Self, PersonId):
del Self.People[PeopleId]
person.py
from room import CRoom
class CPerson:
def __init__(Self, Room, FirstName, SecondName, Gender, Id):
Self.Room = Room
Self.FirstName = FirstName
Self.SecondName = SecondName
Self.Gender = Gender
Self.Id = Id
def Leave(Self):
Self.Room.FindDoorAndLeave(Self.Id)
您可以发布再现您的错误一个小的测试案例?我试图创建两个模块,它们互相引用并没有问题,所以我假设我有一些微妙的缺失点。 – 2008-10-01 15:50:15
[offtop]请阅读Python风格指南http://www.python.org/dev/peps/pep-0008/。特别是,从类名中删除第一个'C',在你的例子中的所有其他名称应该是小写。要回答你的问题:只要`进口房间',并在人的方法使用`room.Room(...)`。 – jfs 2008-10-01 17:46:10
提及你正在使用的是哪个版本的python可能是有用的。我不认为这是一些版本的Python 3(我认为3.5但不是3.4)的问题。 – 2017-02-08 15:13:50