Код: Выделить всё
NotSet = ?
class Client:
def partial_update(
self,
obj_id: int,
obj_field: int | None | NotSet = NotSet,
...
):
# Do not update fields which were not specified explicitly.
if obj_field is NotSet:
# do not update obj_field
else:
# update obj_field
...
- Используйте «Нет».
Недостаточно хорошие решения:
Не используйте.
Недостаточно хорошие решения:
Не используйте.
Недостаточно хорошие решения:
Не используйте. li>
- Ни один из них не предназначен для бизнес-логики. Поля могут иметь значение NULL.
- Использовать встроенное многоточие:
Код: Выделить всё
from types import EllipsisType
def partial_update(
obj_field: int | None | EllipsisType = ...,
):
pass
- Использование встроенного многоточия недостаточно явно
- Вы также не можете использовать многоточие в качестве типа: obj_field: int | Нет | ... = ...,
- Использовать собственный синглтон.
Код: Выделить всё
class NotSetType:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance
NotSet = NotSetType()
def partial_update(
obj_field: int | None | NotSetType = NotSet,
):
pass
- Лучший вариант, но все же NotSetType используется вместо желаемого NotSet для подсказки типа.
Подробнее здесь: https://stackoverflow.com/questions/775 ... value-simi