好的,我有两个模块,每个模块都包含一个类,问题是它们的类相互引用。
比如说,我有一个房间模块和一个包含 CRoom 和 CPerson 的人员模块。
CRoom 类包含有关房间的信息,以及房间中每个人的 CPerson 列表。
然而,CPerson 类有时需要将 CRoom 类用于其所在的房间,例如寻找门,或者查看房间里还有谁。
问题是两个模块相互导入我只是收到一个导入错误,第二个导入的是哪个模块:(
在 c++ 中,我可以通过仅包含标头来解决此问题,并且由于在这两种情况下,类都只有指向另一个类的指针,因此前向声明对于标头就足够了,例如:
class CPerson;//forward declare
class CRoom
{
std::set<CPerson*> People;
...
除了将两个类放在同一个模块或类似的东西中之外,是否有在 python 中执行此操作?
编辑:添加了显示使用上述类的问题的 python 示例
错误:
回溯(最后一次调用):
文件“C:\Projects\python\test\main.py”,第 1 行,
从房间导入 Croom
文件“C:\Projects\python\test\room.py”,第 1 行,
从人导入 CPerson
文件“C:\Projects\python\test\person.py”,第 1 行,
从房间导入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]
人.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)