python依赖模块_Python模块依赖关系

本文讨论了Python中两个模块(CRoom和CPerson)如何解决因类相互引用导致的导入错误。作者介绍了在Python中类似C++的forward declare方法,并提供了实际代码示例,展示了如何通过将相关类放在一起或合理组织模块来避免循环导入问题。
摘要由CSDN通过智能技术生成

我有两个模块,每个模块都包含一个类,问题是它们的类相互引用。

比如说,我有一个房间模块和一个包含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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值