#python #attributes #type-hinting
#python #атрибуты #тип-подсказка
Вопрос:
У меня есть класс, в котором я хочу, чтобы начальное значение атрибута было None
:
class SomeClass:
def __init__(self):
self.some_attribute = None
Как я могу добавить подсказку типа, чтобы IDE понимала, что some_attribute
обычно имеет этот тип AnotherClass
?
Ответ №1:
В Python 3.5 вы должны написать
self.some_attribute = None # type: AnotherClass
Начиная с Python 3.6, для переменных был добавлен новый синтаксис подсказки типа (PEP 526):
self.some_attribute: AnotherClass = None
Это, вероятно, заставит жаловаться каждую систему проверки типов, потому что None фактически не является экземпляром AnotherClass. Вместо этого вы можете использовать typing.Union[None, AnotherClass]
, или сокращение:
from typing import Optional
...
self.some_attribute: Optional[AnotherClass] = None
Ответ №2:
Python 3.10 использует знак канала, |
который многие языки используют в качестве оператора or (PEP 604) для обозначения Typing.Union
.
Итак…
self.some_attribute: AnotherClass|None = None
Более лаконично, Typing
импорт не требуется.
FWIW, обычно 3.10 также устраняет многие встроенные контейнеры, требующие ввода imports: list[int]
, not List[int]
(что все еще работает).
Примечание: если по-прежнему требуется использование прямых объявлений Optional["AnotherClass"]
, канал не работает.
Также канал обрабатывает больше, чем None, поскольку это сокращение для Typing.Union
:
some_attribute: AnotherClass|YetAnotherClass