У меня такое ощущение, что мне нужно каким-то образом использовать связанные дженерики, но я не могу понять это.
Код: Выделить всё
class LinkedList2D:
up: Optional[LinkedList2D]
down: Optional[LinkedList2D]
before: Optional[LinkedList2D]
after: Optional[LinkedList2D]
def __init__(self) -> None:
self.up = None
self.down = None
self.before = None
self.after = None
def iterate_children(self) -> Generator[LinkedList2D, None, None]:
link = self.down
while link:
yield link
link = link.after
def iterate_tree(self) -> Generator[LinkedList2D, None, None]:
for child in self.iterate_children():
if child:
yield child
yield from child.iterate_children()
def get_children(self) -> List[LinkedList2D]:
return list(self.iterate_children())
def insert_under(self, op: LinkedList2D) -> bool:
if op:
if op.down:
self.insert_before(op.down)
op.down = self
self.up = op
return True
def insert_under_last(self, op: LinkedList2D) -> bool:
self.up = op
if op:
if op.down:
last = self.get_children()[-1]
self.insert_after(last)
else:
op.down = self
return True
def insert_after(self, obj: LinkedList2D) -> bool:
if obj:
if obj.after:
obj.after.before = self
obj.after = self
self.after = obj.after
self.up = obj.up
self.before = obj
return True
def insert_before(self, obj: LinkedList2D) -> bool:
if obj:
if obj.before:
obj.before.after = self
obj.before = self
self.up = obj.up
self.before = obj.before
self.after = obj
return True
Код: Выделить всё
T = TypeVar("T", bound="LinkedList2D")
class LinkedList2D(Generic[T]):
up: Optional[T]
down: Optional[T]
before: Optional[T]
after: Optional[T]
def __init__(self) -> None:
...
def iterate_children(self) -> Generator[T, None, None]:
...
def iterate_tree(self) -> Generator[T, None, None]:
...
def get_children(self) -> List[T]:
...
def insert_under(self, op: T) -> bool:
if op:
if op.down:
self.insert_before(op.down)
op.down = self
self.up = op
return True
def insert_under_last(self, op: T) -> bool:
...
def insert_before(self, obj: T) -> bool:
...
Код: Выделить всё
Cannot assign member "down" for type "LinkedList2D[T@LinkedList2D]"
Expression of type "LinkedList2D[T@LinkedList2D]" cannot be assigned to member "down" of class "LinkedList2D[T@LinkedList2D]"
Type "LinkedList2D[T@LinkedList2D]" cannot be assigned to type "T@LinkedList2D | None"
Type "LinkedList2D[T@LinkedList2D]" cannot be assigned to type "T@LinkedList2D"
Cannot assign to "None"PylancereportGeneralTypeIssues
Подробнее здесь: https://stackoverflow.com/questions/673 ... its-own-ty