Разница между «__method__» и «method»

В чем разница между __method__ , method и _method__ ?

Есть ли какие-либо или по какой-то случайной причине люди думали, что __doc__ должен быть прав, а не doc . Что делает метод более особенным, чем другой?

7 Solutions collect form web for “Разница между «__method__» и «method»”

  • __method метод: частный метод.
  • __method__ : специальный метод Python. Они называются так, чтобы предотвратить столкновения имен. Проверьте эту страницу на список этих специальных методов.
  • _method : Это рекомендуемое соглашение об именах для защищенных методов в руководстве по стилю Python .

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

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

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

     Tkinter.Toplevel(master, class_='ClassName') 
  • __double_leading_underscore : при присвоении имени атрибуту класса вызывается имя mangling (внутри класса FooBar , __boo становится _FooBar__boo , см. ниже).

  • __double_leading_and_trailing_underscore__ : «волшебные» объекты или атрибуты, которые __double_leading_and_trailing_underscore__ в контролируемых пользователем пространствах имен. Например __init__ , __import__ или __file__ . Никогда не изобретайте такие имена; используйте их только как задокументированные.

  • method – это обычный метод
  • _method не следует вызывать, если вы не знаете, что делаете, что обычно означает, что вы сами написали метод.
  • __method 2 __method подчеркивания используются для предотвращения имен мангинга. Атрибуты или методы, подобные этому, доступны через instance._ClassName__method . Хотя многие люди называют это «частным», это не так . Вы никогда не должны использовать это, чтобы кто-то не _method к этому методу, вместо этого используйте _method .
  • __method__ используется для специальных методов, которые изменяют поведение экземпляра. Не называйте свои собственные методы такими.

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

 __somename__ 

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

 _somename 

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

 __somename 

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

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

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

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

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

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

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

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

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

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

Шаблон, который вы используете для _method__, на самом деле не используется ни для чего.

  • Python: Разрешить методы, которые не определены специально, называются ala __getattr__
  • Как бы я перекрестно ссылался на функцию, сгенерированную autodoc в Sphinx?
  • Проверьте, является ли функция методом какого-либо объекта
  • функция python * args и ** kwargs с другими указанными аргументами ключевого слова
  • Создает ли Python весь связанный метод для каждого нового экземпляра?
  • Метод класса, который ведет себя по-разному при вызове метода экземпляра?
  • Травление несвязанного метода в Python 3
  • Динамически назначать специальные методы для объектов, но не классы в Python
  • Как найти пример связанного метода в Python?
  • Объект 'int' не вызывается в python
  • python: гибрид между обычным методом и classmethod
  • Python - лучший язык программирования в мире.