Проблема < /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}"
Волшебные строки везде → "Появляется 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")
Что мне нужно < /p>
[*] Автозаполнение все равно должно показывать набор данных: str = "default_dataset" (не
datasetoptions.default).
Нет волшебных строк в кодовой базе (no
"default_dataset" разбросано везде). < /Li>
Функции должны Будьте легко рефакторировать, не обновляя сотни ссылок на строки. И получить ошибку чистой
, если они ошибаются. < /li>
< /ul>
Как лучше всего достичь этого баланса? Возможно ли это вообще возможно в Python?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -strings-i