No muchos conocen esta función, pero las funciones (y métodos) de Python pueden tener attributes. He aquí:Atributos de función de Python: usos y abusos
>>> def foo(x):
... pass
...
>>> foo.score = 10
>>> dir(foo)
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name', 'score']
>>> foo.score
10
>>> foo.score += 1
>>> foo.score
11
¿Cuáles son los posibles usos y abusos de esta característica en Python? Un buen uso que conozco es el uso de PLY de la docstring para asociar una regla de sintaxis con un método. Pero, ¿qué pasa con los atributos personalizados? ¿Hay buenas razones para usarlos?
¿Es muy sorprendente? En general, los objetos de Python admiten atributos ad-hoc. Por supuesto, algunos no, especialmente aquellos con tipo integrado. Para mí, aquellos que no apoyan esto parecen ser las excepciones, no la regla. – allyourcode
Una aplicación en Django: [Personalice la lista de cambios del administrador] (https://docs.djangoproject.com/en/1.6/intro/tutorial02/#customize-the-admin-change-list) –
Consulte [PEP 232] (http://www.python.org/dev/peps/pep-0232/). – user140352