好,我有两个模块,每个包含一个类,问题是他们的类引用对方.
让我们说,例如我有一个房间模块和一个包含CRoom和CPerson的人员模块.
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.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)