В 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: Как заменить свойство на обычный атрибут?
  • py2neo - Как я могу использовать функцию merge_one вместе с несколькими атрибутами для моего узла?
  • Python: разделение строки юникода на границах слов
  • Свойство Python для чтения
  • Как моделировать свойства python в диаграмме UML
  • Python - кэширование свойства, чтобы избежать будущих вычислений
  •  
    Interesting Posts for Van-Lav

    Использование Cython с Asyncio (Python 3.4)

    Объект «NoneType» не имеет атрибута «_app_data» в scrapy \ twisted \ openssl

    Когда я выполняю сканирование () в Dynamodb без фильтра и извлекаю только 10 объектов, он все равно обращается ко всей базе данных?

    Оригинальный твит или ретушированный?

    BeautifulSoup – Как получить весь текст между двумя разными тегами?

    Закройте уже существующие фигуры в matplotlib при работе от затмения

    Многопроцессорный пул 'apply_async' только кажется, вызывает функцию один раз

    Как распечатать код на Python функции на терминал?

    Эффективный способ найти длинную повторяющуюся строку для Python (From Programming Pearls)

    Как отслеживать рейтинги игроков?

    Почему приложение Flask создает два процесса?

    Дезертизация вложенных полей в зефир

    Создать пустую среду conda

    Как docstring в python для нескольких языков

    Python MySQLdb пустой запрос выбора, хотя выполнение ручного запроса обеспечивает результаты

    Python - лучший язык программирования в мире.