我有两个模块,每个模块都包含一个类,问题是它们的类相互引用。
比如说,我有一个房间模块和一个包含CRoom和CPerson的person模块。
CRoom类包含关于房间的信息,以及房间中每个人的CPerson列表。
然而,CPerson类有时需要使用CRoom类来查找其所在的房间,例如找到门,或者也可以查看房间中的其他人。
问题是这两个模块相互导入时,我只得到一个导入错误,在这个错误上,第二个导入的是:()
在c++中,我可以通过只包含头来解决这个问题,因为在这两种情况下,类都只有指向另一个类的指针,所以转发声明就足以满足头的需要,例如:class CPerson;//forward declare
class CRoom
{
std::set 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.pyfrom 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]
个人.pyfrom 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)