为什么这样可以
class Ship:
def __init__(self, parent):
self.parent = parent
class Fleet:
def __init__(self):
self.ships = []
def add_ship(self, ship: Ship):
self.ships.append(ship)
但这不是吗?
class Fleet:
def __init__(self):
self.ships = []
def add_ship(self, ship: Ship):
self.ships.append(ship)
class Ship:
def __init__(self, parent):
self.parent = parent
我知道您在导入时不能有循环引用。但是,这不是导入的东西:它们都在同一个文件中。在这两种情况下,都定义了 Ship ,但似乎如果首先定义了 Fleet ,它就找不到 Ship 的定义。如果我曾经检查过类型,这不是真的。isinstance
def add_ship(self, ship):
if isinstance(ship, Ship): # works fine
self.ships.append(ship)
但是,这不允许我的 IDE (PyCharm) 查看定义和自动完成语法。
事实上,以下设计模式似乎工作正常
class Fleet:
def __init__(self):
self.ships = []
def add_ship(self, ship):
if isinstance(ship, Ship):
self.ships.append(ship)
class Ship:
def __init__(self, parent):
if isinstance(parent, Fleet):
self.parent = parent
但是,同样,不允许我的 IDE 找出类型。这是 Python 3.6.5/Anaconda/Windows 10。