Ряд других вопросов теперь помечены как дубликаты этого вопроса, и по крайней мере два из них задают вопрос, как называются методы __spam__
, или как называется соглашение, и ни один из существующих ответов не покрывает это, так:
На самом деле официального названия нет.
Многие разработчики неофициально называют их «тупыми методами», что означает «Двойной UNDERscore».
Некоторые люди используют термин «магические методы», но это несколько двусмысленно в смысле «более сложные методы», «специальные методы» (см. Ниже) или что-то среднее между ними.
Там является официальным термином "специальные атрибуты", который тесно, но не полностью, связан с более грубыми методами. Глава Модель данных в справочнике никогда не дает полного объяснения, что такое особый атрибут, но основная идея заключается в том, что это как минимум одно из следующего:
- Атрибут, который предоставляется самим интерпретатором или его встроенным кодом, например
__name__
для функции.
- Атрибут, являющийся частью протокола, реализуемого самим интерпретатором, например
__add__
для оператора +
или __getitem__
для индексации и секционирования.
- Атрибут, который интерпретатору разрешено искать специально, игнорируя экземпляр и переходя прямо к классу, как снова
__add__
.
Большинство специальных атрибутов - это методы, но не все (например, __name__
- нет). И большинство из них используют соглашение о «недоумении», но не все (например, метод next
на итераторах в Python 2.x).
А между тем, большинство более сложных методов - это специальные атрибуты, но не все - в частности, stdlib или внешние библиотеки нередко хотят определять свои собственные протоколы, которые работают одинаково, например, pickle
протокол.