Je suis confus lorsque j'ai essayé d'écrire moi-même __init__.py après avoir vu le code dans la bibliothèque numpy \ __ init__.py.Comment étendre correctement la variable __all__ dans un __init__.py?
Voici numpy \ __ init__.py extrait de code
__all__.extend(['__version__', 'pkgload', 'PackageLoader',
'show_config'])
__all__.extend(core.__all__)
__all__.extend(_mat.__all__)
__all__.extend(lib.__all__)
__all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])
Et Ma structure de répertoire est:
app/
...... test.py
. ..... lib1 \
............ __init__.py
............ Lib1File.py
............ sublib1 \
.......... .. ............ __init__.py
............ ............ SubLib1File.py
Le code dans test.py est
from lib1 import *
if __name__ == "__main__":
result1 = Lib1File.add(10, 15) # a simple function in Lib1File.py
print(result1)
result2 = Sublib1File.mul(10,15) # a simple function in Sublib1File.py
print(result2)
Le code dans lib1 \ __ init__.py est
from . import sublib1
__all__ = ["Lib1File"]
__all__.extend(sublib1.__all__)
print(__all__) # it can print ['Lib1File', 'Sublib1File'] on console
Le code lib1 \ sublib1 \ __ init__.py est
__all__ = ["Sublib1File"]
Mais quand je courais test.py, je me suis une erreur
* Fichier "test.py", ligne 1, dans le module de l'importation lib1 . AttributeError: module 'lib1' n'a pas d'attribut
Mes questions 'Sublib1File' sont
Pourquoi je reçois cette erreur même si
__all__ = ['Lib1File', 'Sublib1File']
dans lib1 \ __ init__.py?Comment est-ce que je devrais le réparer si j'emploie toujours juste une importation
from lib1 import *
?Si nous ne pouvons pas résoudre la question 2, quel est le but de
__all__.extend(...)
en numpy \ __ init__?
Oui, j'ai remarqué ça. Mais je n'ai toujours aucune idée de comment résoudre le problème. Pourriez-vous me donner une modification plus spécifique? Merci –