Подтвердить что ты не робот

Разница между "__method__" и "методом"

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

__somename__

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

_somename

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

__somename

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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