В 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 | 

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

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

  • Как у вас есть атрибут, называемый «свойство», и используйте декоратор @property?
  • Константные переменные экземпляра?
  • Могут ли модули иметь свойства так же, как объекты могут?
  • Как назначить свойство экземпляру в Python?
  • Python - кэширование свойства, чтобы избежать будущих вычислений
  • Python: как создать словарь из файла свойств при отсутствии комментариев
  • Проверка, может ли свойство настраиваться / удаляться
  • Python Django: лучше ли добавлять свойства к объекту или делать словарь данных?
  • Python - лучший язык программирования в мире.