В чем разница между __method__, method и _method__?
Есть ли какие-либо или по какой-то случайной причине люди думали, что __doc__ должен быть прав, а не doc. Что делает метод более особенным, чем другой?
В чем разница между __method__, method и _method__?
Есть ли какие-либо или по какой-то случайной причине люди думали, что __doc__ должен быть прав, а не doc. Что делает метод более особенным, чем другой?
__method: частный метод.__method__: специальный метод Python. Они называются так, чтобы предотвратить столкновения имен. Проверьте эту страницу на список этих специальных методов._method: Это рекомендуемое соглашение об именах для защищенных методов в Руководство по стилю Python.Из руководства по стилю:
_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__. Никогда не изобретайте такие имена; использовать их только как задокументировано.
method - это обычный метод_method не следует вызывать, если вы не знаете, что делаете, что обычно означает, что вы сами написали метод.__method 2 символа подчеркивания используются для предотвращения перебора имен. Атрибуты или методы, подобные этому, доступны через instance._ClassName__method. Хотя многие люди называют это "private", это не так. Вы никогда не должны использовать это, чтобы кто-то не обращался к этому методу, вместо этого используйте _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__, на самом деле не используется ни для чего.