Si vous exposez autre chose qu'une chaîne, Python lèvera une exception. C'est pourquoi pylint donne cette erreur, car le code est incorrect.
fichier mymodule.py:
def func():
pass
__all__ = [func]
Exécuter maintenant:
from mymodule import *
Vous obtiendrez un TypeError
.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: attribute name must be string, not 'function'
La raison est que __all__
est utilisé pour nommer les attributs de l'objet module. C'est juste comment le mécanisme fonctionne. Si vous vouliez modifier le mécanisme d'importation de Python pour y placer des objets, je suppose que vous le pourriez, mais cela ne fonctionnerait qu'avec certains types d'objets (les fonctions et les classes fonctionneraient, mais les constantes ne fonctionneraient pas, et vous ne le feriez pas être capable de renommer les fonctions et les classes).