2012-01-19 12 views
16

relacionadas: What is the common header format of Python files?¿Cómo encontrar una lista de todas las variables de doble subrayado?

¿Dónde puedo encontrar una lista de todos doble subrayado variables/palabras clave que se utilizan comúnmente en Python?

En Python, las variables que comienzan y terminan con doble guión bajo suelen ser para almacenar metadatos o están integradas en el sistema. Por ejemplo,

#!/usr/bin/env python 

__author__ = 'Michael0x2a' 
__license__ = 'GPL' 

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

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

estoy bastante seguro __author__ y __license__ son bastante bien conocidos. ¿Qué otras variables de metadatos de doble subrayado hay? ¿Hay una lista completa que pueda verificar en algún lado? ¿Puedo hacer los míos, o hay muchos que se han convertido en estándares de facto que debería usar?

Cosas como __init__, __name__ y __doc__ están prácticamente integradas en Python. ¿Son esas las dos únicas palabras reservadas de doble subrayado? ¿Hay más? ¿Hay algún lugar donde pueda obtener una lista?

[Editar]
estaba navegando y se encontró con otra question que unía a un mindmap de un montón de variables dobles-subrayado.

+3

Ninguno de estos son palabras clave ** ** * per se*; solo son "mágicos". –

Respuesta

22

Si desea ver los nombres mágicos documentados o no, vaya al directorio lib y ejecute:

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

que produce:

'__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

Curiosamente, hay docenas de nombres dunder conocidos que no están en esta lista: __add__, __iadd__, __radd__, etc. –

+4

@NedBatchelder Para obtener una lista más completa, debe buscar recursivamente __Lib__ * y * los directorios a continuación it: '' find Lib -name '* .py' -exec egrep -oh '__ [A-Za-z _] [A-Za-z_0-9] * __' '{}' \; | ordenar | uniq''. Verás que hay * muchos * más nombres, 256 de ellos en mi pago de Py27 :) –

10

La lista completa utilizada por Python se proporciona en el Python Language Reference section 3, "Data model". Todos los demás no son estándar o son utilizados por módulos de terceros y están documentados por separado.

+0

PEP 8 enumera '__version__' como la única variable global con fines meramente documentales. –

+1

Curiosamente, '__version__' no aparece en la referencia del lenguaje vinculado. – Bengt

+0

Eso es porque no es parte del lenguaje. –

Cuestiones relacionadas