Различие между “__ метод __” и “метод” [дубликат]

В моем случае мне пришлось добавить android: debuggable = "false" в манифест .. Работало даже без нескольких дней назад.

38
задан Josh Lee 17 September 2013 в 21:21
поделиться

7 ответов

Из руководства по стилю :

  • _single_leading_underscore : слабый индикатор «внутреннего использования». Например из M import * не импортирует объекты, имена которых начинаются с подчеркивания.

  • single_trailing_underscore_ : используется по соглашению, чтобы избежать конфликтов с Ключевое слово Python, например

     Tkinter.Toplevel (master, class _ = 'ClassName')
    
  • __ double_leading_underscore : при именовании атрибута класса вызывает name искажение (внутри класса FooBar , __boo становится _FooBar__boo ; см. ниже).

  • __ double_leading_and_trailing_underscore __ : «магические» объекты или атрибуты, которые живут в пространствах имен, контролируемых пользователем. Например, __ init __ , __ import __ или __ file __ . Никогда не придумывайте таких имен; только используйте их как описано в документации.

75
ответ дан 27 November 2019 в 03:13
поделиться
  • метод - это обычный метод
  • _method не следует вызывать, если вы не знаете, что делаете, что обычно означает что вы сами написали метод.
  • __ method два символа подчеркивания используются для предотвращения искажения имени. Подобные атрибуты или методы доступны через instance._ClassName__method . Хотя многие люди называют это «частным», это не , а не . Вы никогда не должны использовать это, чтобы предотвратить доступ к этому методу кому-либо, вместо этого используйте _method .
  • __ method __ используется для специальных методов, которые изменяют поведение экземпляра. Не называйте так свои собственные методы.
22
ответ дан 27 November 2019 в 03:13
поделиться

Это все соглашения, поэтому они никоим образом не применяются. Тем не менее, вы обычно можете ожидать:

__somename__

Что-то определенное в самой спецификации языка Python. Не используйте это в своем собственном именовании.

_somename

Обычно предполагается, что это вызывается через какой-то другой механизм, а не напрямую. Подобно объявлению чего-то закрытого на большинстве других языков, но никак не принудительно.

__somename

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

Любое из вышеперечисленного может в равной степени применяться к именам функций, переменных или классов.

4
ответ дан 27 November 2019 в 03:13
поделиться

Эти методы были названы так, чтобы уменьшить вероятность коллизий имен.

1
ответ дан 27 November 2019 в 03:13
поделиться

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

0
ответ дан 27 November 2019 в 03:13
поделиться

Некоторые методы с двойным префиксом подчеркивания и суффиксом являются специальными. Например, __ init __ вызывается всякий раз, когда создается экземпляр этого класса, а __ str __ вызывается, когда объект должен быть напечатан. В основном их можно называть по-особенному. Вы можете использовать их, как любой другой метод, или вы можете вызывать их особым способом, связанным с ними.

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

0
ответ дан 27 November 2019 в 03:13
поделиться

Шаблон __ name __ указывает на «магические» методы. Они вызываются различными функциями, такими как

str(x) -> x.__str__()
repr(x) -> x.__repr__()
x[0] -> x.__getitem__(0)
etc

. Одиночный префикс подчеркивания указывает на частный атрибут и соблюдается только в соответствии с соглашением.

двойной префикс подчеркивания инициирует изменение имени, где атрибут с именем __attr изменяется на __Class_attr при

Используемый вами шаблон _method__ на самом деле ни для чего не используется.

0
ответ дан 27 November 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: