Когда используются названия popeon sunder?
В Python существуют соглашения для одиночного подчеркивания, двойного подчеркивания, двойного указателя + двойного нижнего подчеркивания и одиночного нижнего подчеркивания. Многие из них изложены в ответах на тему Что такое значение single- и двойное подчеркивание перед именем объекта? ,
Но каково значение или условное обозначение для единственного ведущего + единственного нижнего подчеркивания? Я впервые увидел их использование в модуле enum
:
8.13.15.3.2. Поддерживаемые имена _sunder_
-
_name_
- имя участника -
_value_
- значение члена; могут быть установлены/изменены в новых -
_missing_
- функция поиска, используемая, когда значение не найдено; может быть отменено -
_ignore_
- список имен, либо как список(), либо str(), которые не будут преобразованы в элементы и будут удалены из окончательного класса -
_order_
- используется в коде Python 2/3, чтобы гарантировать, что порядок членов согласован (атрибут класса, удаленный при создании класса) -
_generate_next_value_
- используется функциональным API и автоматически, чтобы получить соответствующее значение для члена перечисления; может быть отменено
Я еще не видел таких single- ведущих single- задних именных ярких имен. Обращаются ли они каким-либо особым образом или иным образом имеют подразумеваемое значение, отличное от любых других соглашений об именах, связанных с подчеркиванием? Как они отличаются от того, что не имеют подчеркивания?
Ответы
Ответ 1
Они не рассматриваются каким-либо особым образом. Они используются модулем enum для
- Не быть случайно переопределенным
например
class Status(Enum):
alive = auto()
dead = auto()
missing = auto()
Вы можете видеть, что Status.missing
и Status._missing_
- это разные объекты. Если _sunder_
имена _sunder_
были разрешены, мы могли бы случайно переопределить функцию _missing_
что привело бы к неожиданным ошибкам.
-
не отображаются как частные. Имя _value
в Python считается частным. Чтобы выразить, что они не являются частными (что, опять же, пользователь может захотеть, чтобы значение перечисления было частным), им вместо этого дают имена sunder
-
другие альтернативы, такие как __double_leading_underscore
и __dunder__
также имеют специальные значения в python, как вы указали выше. Методы _sunder_
в Enum
действуют подобно протоколам __dunder__
чистого Python, но не зарезервированы языком.
По сути, это возможность избежать конфликтов имен атрибутов, не создавая неправильное впечатление.