Как сохранить автозаполнение для струнных аргументов, избегая магических строк в коде?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как сохранить автозаполнение для струнных аргументов, избегая магических строк в коде?

Сообщение Anonymous »

У меня есть большая кодовая база с сотнями функций, которые принимают струнные аргументы, и я хочу уменьшить хрупкое использование жестко -кодированных строк при сохранении автозаполнения для пользователей. < /p>
Проблема < /strong> < /p>
Прямо сейчас функции выглядят так: < /p>

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

def process_data(dataset: str = "default_dataset"):
"""Process a dataset.

Args:
dataset: The name of the dataset to process. Available options: 'default_dataset', 'alternative_dataset'.
"""
if dataset not in {"default_dataset", "alternative_dataset"}:
raise ValueError(f"Invalid dataset: {dataset}")
return f"Processing {dataset}"
Это имеет три основные проблемы [/b]:
Волшебные строки везде → "Появляется default_dataset" В функциональных подписях, условных условиях и документации.
хрупкий при переименовании < /strong> → if "default_dataset" изменяется, мы должны вручную обновить все экземпляры.
AutoComplete - это приятно здесь
(dataSet: str = "default_dataset").
Попытка исправления:
/> Я попытался использовать перечисление для удаления жестких строк: < /p>

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

from enum import Enum

class DatasetOptions(str, Enum):
DEFAULT = "default_dataset"
ALTERNATIVE = "alternative_dataset"

def process_data(dataset: DatasetOptions = DatasetOptions.DEFAULT):
"""Process a dataset.

Args:
dataset: The name of the dataset to process. Available options: {datasets}.
""".format(datasets=", ".join([d.value for d in DatasetOptions]))

if dataset not in DatasetOptions._value2member_map_:
raise ValueError(f"Invalid dataset: {dataset}")

return f"Processing {dataset}"
< /code>
Это удаляет магические строки, но теперь автозаполнение - это плохо: < /p>
process_data(  # shows (dataset: DatasetOptions = DatasetOptions.DEFAULT)
< /code>
Ожидаемое поведение: < /p>
process_data(  # should show (dataset: str = "default_dataset")
Мы хотим, чтобы пользователи передавали простые строки ("default_dataset"), но внутренне обеспечивают правильность с перечислением.
Что мне нужно < /p>

[*] Автозаполнение все равно должно показывать набор данных: str = "default_dataset" (не
datasetoptions.default).
Нет волшебных строк в кодовой базе (no
"default_dataset" разбросано везде). < /Li>
Функции должны Будьте легко рефакторировать, не обновляя сотни ссылок на строки. И получить ошибку чистой
, если они ошибаются. < /li>
< /ul>
Как лучше всего достичь этого баланса? Возможно ли это вообще возможно в Python?>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -strings-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сохранить автозаполнение для струнных аргументов, избегая магических строк в коде?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как правильно избежать пути UNC для струнных литералов в Python, избегая двойных префиксов?
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Лучшие практики привязки моделей к EditForm и InputFile без магических строк
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Проверка ключа в словаре без сравнения магических значений
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Jupyter Notebook nbconvert без магических команд/без уценки
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous

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