Lorsque j'essaie de taper hint dans ma classe personnalisée, python lance un attribut AttributeError sur 'module.class'. L'Intellisence me dit, l'importation est juste et la classe peut être trouvée.L'indication de type Python 3.5 donne "AttributeError: le module 'iterator_function' n'a pas d'attribut 'IteratorFunction'"
function_dispatcher.py, il se passe mal dans ce fichier à : iterator_function.IteratorFunction
. Lorsque je supprime l'indice de type particulier, le programme fonctionne correctement.
from abc import ABC, abstractclassmethod
import iterator_function
class FunctionDispatcher(ABC):
@abstractclassmethod
def dispatch(self, function : iterator_function.IteratorFunction):
pass
iterator_function.py, il s'agit de la classe importée. Remarque: le type indiquant : function_dispatcher.FunctionDispatcher
fonctionne ici.
import function
import function_dispatcher
class IteratorFunction(function.Function):
def accept(self, dispatcher : function_dispatcher.FunctionDispatcher):
dispatcher.dispatch(self)
C'est la sortie de retraçage:
1> Traceback (most recent call last):
1> File "C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\preprocessor\main.py", line 1, in <module>
1> import generator
1> File "C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\preprocessor\generator.py", line 3, in <module>
1> from iterator_function import IteratorFunction
1> File "C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\preprocessor\iterator_function.py", line 1, in <module>
1> import function
1> File "C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\preprocessor\function.py", line 2, in <module>
1> import function_dispatcher
1> File "C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\preprocessor\function_dispatcher.py", line 4, in <module>
1> class FunctionDispatcher(ABC):
1> File "C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\preprocessor\function_dispatcher.py", line 6, in FunctionDispatcher
1> def dispatch(self, function : iterator_function.IteratorFunction):
1> AttributeError: module 'iterator_function' has no attribute 'IteratorFunction'
Pour ceux qui se demandent ce que je suis en train de faire: la mise en œuvre du visitor pattern.
semble que vous avez un ([import circulaire] https://docs.python.org/3.5/faq/programming.html # quoi-sont-les-meilleures-pratiques-pour-utiliser-importer-dans-un-module). –