Разница между «__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__
  • Как вызвать метод python из класса java?
  • Открытый метод Python TypeError
  • Python: Что-то делать для любого метода класса?
  • объект привязанного и несвязанного метода python
  • Очень странное поведение оператора «есть» с методами
  • Python Class Based Decorator с параметрами, которые могут украсить метод или функцию
  • Предпочтительный способ динамического вызова метода какого-либо объекта
  • Python - лучший язык программирования в мире.