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

Предположим, что у вас есть открытый метод в Python, основной целью которого является извлечение значения базового атрибута данных (например, внутреннего хранилища резервных копий). Метод может иметь ленивую логику оценки и т. Д. Свойством является пример такого метода.

Тогда естественно использовать одно и то же имя для атрибута метода и данных, за исключением префикса подчеркивания для атрибута данных. Например–

class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x 

(из документации «свойства» Python )

Но каковы предпочтительные соглашения, если метод используется для внутреннего использования, и поэтому он имеет префикс с подчеркиванием? Префикс хранилища резервных копий двумя ведущими символами подчеркивания вызовет манипуляцию имени и, следовательно, не идеален.

Возможны две возможности:

 def _get_x(self): return self._x def _x(self): return self._x_ 

Стиль Python говорит, что второй (добавление подчеркивания), однако, должен использоваться только для предотвращения конфликтов с зарезервированными ключевыми словами.

2 Solutions collect form web for “В Python, что является предпочтительным соглашением об именах для резервного хранилища внутреннего свойства?”

Предпочтительным соглашением является использование одного ведущего подчеркивания.

Это рекомендация PEP 8 для частных атрибутов.

См. Этот пример в docstring для свойства ():

 >>> help(property) Help on class property in module builtins: class property(object) | property(fget=None, fset=None, fdel=None, doc=None) -> property attribute | | fget is a function to be used for getting an attribute value, and likewise | fset is a function for setting, and fdel a function for del'ing, an | attribute. Typical use is to define a managed attribute x: | class C(object): | def getx(self): return self._x | def setx(self, value): self._x = value | def delx(self): del self._x | x = property(getx, setx, delx, "I'm the 'x' property.") | | Decorators make defining new properties or modifying existing ones easy: | class C(object): | @property | def x(self): return self._x | @x.setter | def x(self, value): self._x = value | @x.deleter | def x(self): del self._x | 

Почему вы сделали бы это свойство, если оно предназначено для внутреннего использования? Если это для внутреннего использования, просто войдите в атрибут напрямую.

Но тогда вы все равно будете использовать один знак подчеркивания, но назовите его чем-то другим. Но опять же, в этом случае теряется вся цель сделать его собственностью.

  • Можно ли получить ссылку на свойство Python?
  • Когда и как использовать встроенное свойство функции () в python
  • Как установить свойство python в __init__
  • Подклассирование «свойства» Python
  • расширить Python namedtuple со многими @properties?
  • Файл свойств в python (аналогично свойствам Java)
  • python: автоматически ли кэшируются поля свойств?
  • Свойство Python против метода, когда не требуется доступ к атрибуту?
  • Python: как передать более одного аргумента в свойство getter?
  • Python: Как заменить свойство на обычный атрибут?
  • Как создать свойство класса только для чтения в Python?
  • Python - лучший язык программирования в мире.