好吧我有兩個模塊,每個模塊包含一個類,問題是它們的類相互引用。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