Perché Python non consente ai moduli di avere un __call__
? (Oltre l'ovvio che non sarebbe facile importare direttamente). In particolare, perché non si utilizza la sintassi a(b)
per trovare l'attributo __call__
come fa per funzioni, classi e oggetti? (È solo ricerca incompatili diverso per i moduli?)Moduli richiamabili
>>> 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
Migrazione di un decoratore da un pacchetto nel proprio sottomodulo. @esempio (...) era di gran lunga il caso d'uso più comune, ma @ example.special_case (...) era un nuovo uso. Non volevo implementarlo con un esempio di classe e metodi statici, dato che non era adatto. Non sono sicuro che un modulo richiamabile sia più adatto, ma ho iniziato a studiarlo e poi ho voluto sapere perché non ha funzionato. –
Avevo anche pensato che potesse semplificare alcuni moduli come datetime e decimal, rendendo rispettivamente il modulo .__ call__ be datetime.datetime o decimal.Decimal. Tuttavia, digitare (decimale ('1')) non equivale a decimale e possibili altri problemi. * scrollando le spalle * Era un'idea. –
"Oltre l'ovvio che non sarebbe facile importarlo direttamente." Perché pensi che? –