Почему это нормально
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
Я знаю, что при импорте нельзя использовать циклические ссылки. Однако это не импортная вещь: оба они находятся в одном файле. В обоих случаях определение «Корабль» сделано, но кажется, что если «Флот» определен первым, он не может найти определение «Корабль». Это не true, если я использовал 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.