2012-01-19 16 views
16

pokrewne: What is the common header format of Python files?Znajdowanie listy wszystkich zmiennych podwójnie podkreślonych?

Gdzie mogę znaleźć listę wszystkich podwójnego podkreślenia zmienne/słowa kluczowe, które są powszechnie używane w Pythonie?

W języku Python zmienne rozpoczynające się i kończące się podwójnymi znakami podkreślenia zwykle służą do przechowywania metadanych lub są wbudowane w system. Na przykład,

#!/usr/bin/env python 

__author__ = 'Michael0x2a' 
__license__ = 'GPL' 

class Test(object): 
    def __init__(self): 
     print 'Hello World!' 

if __name__ == '__main__': 
    t = Test() 

jestem całkiem pewien __author__ i __license__ są dość dobrze znane. Jakie są inne podwójne podkreślenia zmiennych metadanych? Czy istnieje obszerna lista, którą mogę gdzieś sprawdzić? Czy mogę po prostu wymyślić własne, czy też jest kilka takich, które stały się de facto standardami, z których powinienem skorzystać?

Rzeczy takie jak __init__, __name__ i __doc__ są prawie wbudowane w Pythonie. Czy są to jedyne dwa zarezerwowane podwójne słowa kluczowe? Czy są jeszcze jakieś? Czy jest jakieś miejsce, gdzie mogę dostać listę?

[Edycja]
ja przeglądanie i napotkano jeszcze question że połączony z mindmap pęczek zmiennych podwójnych podkreślenia.

+3

Żaden z nich są słowa kluczowe ** ** * jako taki*; są po prostu "magiczne". –

Odpowiedz

22

Jeśli chcesz zobaczyć magiczne nazwy czy udokumentowanych lub nie, przejdź do katalogu lib i uruchom:

egrep -oh '__[A-Za-z_][A-Za-z_0-9]*__' *.py | sort | uniq 

która produkuje:

'__all__' 
'__args__' 
'__author__' 
'__bases__' 
'__builtin__' 
'__builtins__' 
'__cached__' 
'__call__' 
'__class__' 
'__copy__' 
'__credits__' 
'__date__' 
'__decimal_context__' 
'__deepcopy__' 
'__dict__' 
'__doc__' 
'__exception__' 
'__file__' 
'__flags__' 
'__ge__' 
'__getinitargs__' 
'__getstate__' 
'__gt__' 
'__import__' 
'__importer__' 
'__init__' 
'__ispkg__' 
'__iter__' 
'__le__' 
'__len__' 
'__loader__' 
'__lt__' 
'__main__' 
'__module__' 
'__mro__' 
'__name__' 
'__package__' 
'__path__' 
'__pkgdir__' 
'__return__' 
'__safe_for_unpickling__' 
'__setstate__' 
'__slots__' 
'__temp__' 
'__test__' 
'__version__' 
+4

Co ciekawe, istnieją dziesiątki dobrze znanych nazw dunder, których nie ma na tej liście: __add__, __iadd__, __radd__, itp. –

+4

@NedBatchelder Aby uzyskać bardziej kompletną listę, musisz przeszukać rekursywnie __Lib__ * i * katalogi poniżej it: 'find lib -name '* .py' -exec egrep -oh '__ [A-Za-z _] [A-Za-z_0-9] * __' '{}' \; | sortuj uniq''. Zobaczysz, że istnieje * wiele * więcej nazw - 256 z nich na mojej kasie Py27 :) –

10

Pełna lista używana przez Python znajduje się w Python Language Reference section 3, "Data model". Każdy inny jest niestandardowy lub używany przez moduły stron trzecich i jest dokumentowany osobno.

+0

PEP 8 wymienia '__version__' jako jedyną zmienną globalną dla celów czysto dokumentacyjnych. –

+1

Co ciekawe, '__version__' nie pojawia się w odnośnym języku odniesienia. – Bengt

+0

To dlatego, że nie jest częścią języka. –

Powiązane problemy