Как лучше всего (PEP или что-нибудь официальное?) определять необязательные переменные экземпляра:
- смешанная/неоднозначная/неявная типизация, но простая переменная равна None проверяет
- чистая/однозначная/явная типизация, но немного более сложный интерфейс переменных с getattr , попробовать/исключить, требуется поднять ошибку
Я не нашел ничего явного по этому поводу в официальной документации Python. или руководство по стилю PEP. В официальной документации Python ясно указано только использование None для необязательных аргументов функции, но не в отношении атрибутов экземпляра. Док. модуля набора текста вообще не дает никаких подробностей по этой теме.
Знаете ли вы какие-либо ресурсы, дающие дополнительную информацию?
Метод 1 : Присвоение None необязательным переменным экземпляра
Мы можем присвоить None необязательным переменным, придав им два разных типа, но упростив проверку того, установлена ли переменная:
Код: Выделить всё
class A:
def __init__(self, var_a: int | None = None) -> None:
self.optional_a: int | None = var_a # assigned now or later - if ever
self.optional_b: str | None # to be assigned later - if ever
def maybe_assign_b(self, var_b: str) -> None:
self.optional_b = var_b
def do_something(self) -> str:
n_reps: int = 5 if self.optional_a is None else self.otional_a
if self.optional_a is None: # None:
self.optional_b = var_b
def do_something(self) -> str:
# Using getattr with default (my preferred option)
n_reps: int = getattr(self, 'optional_a', 5)
try: #
Подробнее здесь: [url]https://stackoverflow.com/questions/79374444/typing-of-optional-instance-variables-assign-none-vs-only-define-type[/url]
Мобильная версия