In un mio progetto corrente, ho deciso di non inserire alcuna quantità significativa di codice in __init__.py
file, semplicemente perché non mi piacciono. Nella mia testa, un file __init__.py
è solo lì per informare Python che la cartella è un modulo. Continuo a dimenticare che potrebbero contenere molto codice proprio come qualsiasi altro modulo Python.
In questo progetto ho deciso di creare un sottomodulo "principale" ogni volta che sono tentato di inserire quantità significative di codice in un file __ini__.py
, quindi importare il sottomodulo "principale" in __init__.py
e sostituire il modulo .
Ad esempio, supponiamo di avere un modulo denominato alpha
:
alpha/ __init__.py
E voglio mettere un paio di costanti e metodi di supporto sotto il modulo alpha
. Invece di mettere il codice in __init__.py
creo un nuovo modulo chiamato (per esempio) main
:
alpha/ __init__.py main.py
Poi ho messo le mie cose in quel modulo. Poi lo metto in __init__.py
:
import sys
import alpha.main
sys.modules["alpha"] = alpha.main
Ora posso inserire elementi in alpha/main.py
:
author = "John Hancock"
maintainer = "John Hancock"
E accedici in questo modo:
import alpha
print(alpha.maintainer)
Funziona perfettamente, e mi piace che non debba più modificare __init__.py
file.
Tuttavia, questo tipo di "magia" mi dà sempre la sensazione che un ninja Python più esperto mi taglierebbe in faccia se mi catturasse.
Questa convenzione mi sembra del tutto innocua, ma potrebbe tornare a mordermi in culo più tardi? Ci sono delle insidie che dovrei cercare?