2013-06-05 2 views
2

Так что префикс подчеркивания для методов и атрибутов редко используется в Python. Но очень просто прояснить, какие методы являются частью API. Преимущество этого заключается в том, чтобы быть самоочевидным и сделать рефакторинг более безопасным, поскольку это предупреждение и дает ответственность другому программисту при доступе/перезаписи этих членов. Но примерно 80% методов и атрибутов были бы префиксом тогда, и, опять же, он редко используется в других библиотеках, выглядит уродливым и чувствует себя бесстрашным для меня.Должен ли я подчеркивать префикс всех членов, отличных от API в Python?

Я программирую на Python в течение 4 лет и почти никогда не использовал префикс подчеркивания по вышеуказанным причинам, и я не являюсь контрольным уродцем, но начинаю думать об этом по вышеуказанным причинам для более чистого описания интерфейса. PEP8 не препятствует его использованию.

Итак, что мне теперь делать, если я префикс все мои члены, не являющиеся членами API, с символами подчеркивания?

+0

Это вопрос «стиль кодирования». Нет объективного ответа. [PEP8 содержит некоторые примеры и рекомендации] (http://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles). – user2246674

+0

Я знаю связанные с подчеркиванием части PEP8 и не мог найти никаких дальнейших намеков на это, кроме того, что это возможно *. Если это вопрос стиля кодирования, мой вопрос относится к тому, почему этот стиль кодирования настолько печален. Я много раз искал эту тему, прежде чем публиковать вопрос о SO, и везде он говорит «возможно», «полезно», но на самом деле он не так много используется. – Iodnas

+0

Итак, вы можете делать то, что пожелаете (или старший разработчик или руководитель проекта/автор/сопровождающий). Будьте последовательны (в рамках каждого проекта) и сможете обосновать рациональные решения. – user2246674

ответ

2

Как this popular interpretation из import this идет;

joined_lowercase для атрибутов, методов и функций

joined_lowercase or JOINED_CAPS констант

ThisKindOfCamelCase для классов

Чтобы быть более конкретным, атрибуты могут быть interface, _internal или __private,

Но старайтесь избегать формы __private. Я никогда не использую его. Доверьтесь мне. Если вы его используете, вы WILL пожалеете об этом позже.

+0

Я знаю, что они * могут быть обозначены как '' _internal'', и это не мой вопрос. Я прошу, если я действительно должен * сделать * это экстенсивно. – Iodnas

+0

Да! Это упрощает чтение кода. –

+0

Итак, почему он так непоследовательно используется для внутренних членов в современных и профессиональных библиотеках, таких как Django, Tastypie, Sphinx, ...? – Iodnas