В вашем примере, вероятно, есть опечатка, вместо
self.next = None
это должно быть
self._next = None
Поскольку мы перезаписываем property
полем, которое, кажется, работает в вашем коде, но не вероятно, как это было задумано.
Также кажется, что ListNode.next
должен быть property
слишком похож на
class ListNode(metaclass=ABCMeta):
...
@property
@abstractmethod
def next(self):
"""Read the next attribute"""
Наконец добавление сеттера для ListNode.next
@next.setter
def next(self, next_):
"""Write the next attribute"""
делает ошибки исчезать.
Кстати, украшение ListNode.next
сеттера с abstractmethod
вызывает ошибки
> mypy test.py
test.py:14: error: Overloaded method has both abstract and non-abstract variants
test.py:19: error: Decorated property not supported
test.py:53: error: Property "next" defined in "ListNode" is read-only
и кажется избыточным, потому что удаление сеттера для SinglyLinkedListNode.next
вызывает
> mypy test.py
test.py:37: error: Read-only property cannot override read-write property
Также для комментария типа для работы нам нужно добавить type:
префикс
class SinglyLinkedListNode(ListNode):
def __init__(self, value):
self.value = value
self._next = None # type: Optional[SinglyLinkedListNode]
(мы также можем добавить from typing import Optional
, потому что PyCharm не удовлетворен, говоря « Неразрешенная ссылка« Необязательно »», но для mypy это нормально).