【发布时间】:2021-10-07 00:48:25
【问题描述】:
为什么会这样
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。
【问题讨论】:
标签: python python-3.x type-hinting python-typing