Как создать одноэлементный объект, который можно было бы использовать как тип, так и значение (аналогично None)?Python

Программы на Python
Anonymous
Как создать одноэлементный объект, который можно было бы использовать как тип, так и значение (аналогично None)?

Сообщение Anonymous »

Мне хотелось бы иметь собственное значение NotSet, которое можно было бы использовать в подсказках типов, аналогично None.

Код: Выделить всё

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

Вернуться в «Python»