Как я могу получить список всех доступных специальных методов? - PullRequest
0 голосов
/ 26 декабря 2009

Специальные методы, например (в Django):

def __wrapper__
def __deepcopy__
def __mod__
def __cmp__

Ответы [ 3 ]

8 голосов
/ 26 декабря 2009

Для печати зарезервированных слов Python просто используйте

>>> import keyword
>>> print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass',
'raise', 'return', 'try', 'while', 'with', 'yield']

Чтобы прочитать объяснение специальных методов объекта Python, прочитайте руководство или Погружение в Python .

Еще один фрагмент кода, который вы можете использовать:

>>> [method for method in dir(str) if method[:2]=='__']
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', 
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', 
'__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', 
'__sizeof__', '__str__', '__subclasshook__']

чтобы увидеть все встроенные специальные методы класса str.

5 голосов
/ 26 декабря 2009

Список имен специальных методов здесь , но он не является исчерпывающим для магических имен - например, методы __copy__ и __deepcopy__ упоминаются здесь вместо этого, переменная __all__ здесь , такие атрибуты класса, как __name__, __bases__ и т. д. здесь и т. д. Я не знаю ни одного авторитетного списка всех таких имен, определенных в каком-либо конкретном выпуске языка.

Однако, если вы хотите проверить любое конкретное имя, скажем, __foo__, просто найдите его в поле «Быстрый поиск» документации Python (подойдет любой из приведенных выше URL!) - это таким образом, вы найдете его, если он официально является частью языка, и если вы не найдете его, вы поймете, что это ошибочное использование части пакета или фреймворка, нарушающего соглашения языка.

1 голос
/ 26 декабря 2009

Вы можете найти большинство из них здесь: http://docs.python.org/genindex-all.html#_

идентификаторы с двумя начальными + 2 последними подчеркиваниями, конечно, зарезервированы для имен специальных методов . Хотя такие идентификаторы можно определить сейчас, возможно, это не так в будущем. __deepcopy__, __mod__ и __cmp__ - это все специальные методы, встроенные в python, которые пользовательские классы могут переопределять для реализации функциональности, специфичной для класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...