¿Por qué Python no permite que los módulos tengan un __call__
? (Más allá de lo obvio de que no sería fácil importar directamente.) Específicamente, ¿por qué el uso de la sintaxis a(b)
no encuentra el atributo __call__
como lo hace para funciones, clases y objetos? (Es de búsqueda acaba de manera incompatible diferente para módulos?)Módulos que se pueden llamar
>>> print open("mod_call.py").read()
def __call__():
return 42
>>> import mod_call
>>> mod_call()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> mod_call.__call__()
42
Migración de un decorador desde un paquete a su propio submódulo. @example (...) era, con mucho, el caso de uso más común, pero @ example.special_case (...) era un nuevo uso. No quería implementarlo con una clase de ejemplo y métodos estáticos, ya que era un mal ajuste. No estoy seguro de que un módulo llamable sea más adecuado, pero comencé a investigarlo y luego quise saber por qué no funcionó. –
También pensé que podría simplificar algunos módulos como datetime y decimal, haciendo que el módulo .__ call__ sea datetime.datetime o decimal.Decimal respectivamente. Sin embargo, entonces el tipo (decimal ('1')) no sería lo mismo que el decimal, y otros posibles problemas. * encogerse de hombros * Fue una idea. –
"Más allá de lo obvio que no sería fácil importar directamente". ¿Por qué piensas eso? –