2009-12-26 2 views
0

существуют специальные методы, например (в Django):Как я могу получить список всех доступных специальных методов?

def __wrapper__ 
def __deepcopy__ 
def __mod__ 
def __cmp__ 
+0

Не могли бы вы перефразировать свой вопрос? Я не совсем уверен, что вы спрашиваете. –

+2

Что вам нужно? В чем разница между зарезервированными словами Django и Python? Вам просто нужен список зарезервированных слов Python? – voyager

+0

Прошу прощения, это мой самый высокий уровень написания английского, я думаю, вы должны использовать свое воображение. – zjm1126

ответ

5

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

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

1

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

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

+0

Вы всегда сможете определить идентификаторы '__something__', если язык не переопределен. Вы должны знать, что вы можете переписать идентификацию переменной существующего имени специального метода. – voyager

+0

хорошо, что в документе говорится, что «приложения не должны рассчитывать определять имена с использованием этого соглашения», что подразумевает, что поведение также может быть неопределенным (т. Е. Оно может работать, оно может терпеть неудачу, может взорваться в будущей версии и т. Д.), .... – jspcal

8

Для печати зарезервированных слов языка 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, read the manual или Dive into 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 класса.

+1

Обратите внимание, что 'dir()' не показывает атрибуты родительских классов. Например, 'str .__ mro__' не включен в ваш список. –