Python 3.x Python3.5类型暗示给出了;属性错误:模块';迭代器函数';没有属性';迭代器函数'&引用;

Python 3.x Python3.5类型暗示给出了;属性错误:模块';迭代器函数';没有属性';迭代器函数'&引用;,python-3.x,python-import,attributeerror,type-hinting,visitor-pattern,Python 3.x,Python Import,Attributeerror,Type Hinting,Visitor Pattern,当我尝试向自定义类键入提示时,python将在“module.class”上抛出AttributeError。Intellisence告诉我,导入是正确的,可以找到类 函数_dispatcher.py,此文件中的:iterator_function.IteratorFunction出错。当我删除特定类型的提示时,程序将正常运行 from abc import ABC, abstractclassmethod import iterator_function class FunctionDisp

当我尝试向自定义类键入提示时,python将在“module.class”上抛出AttributeError。Intellisence告诉我,导入是正确的,可以找到类

函数_dispatcher.py,此文件中的
:iterator_function.IteratorFunction
出错。当我删除特定类型的提示时,程序将正常运行

from abc import ABC, abstractclassmethod
import iterator_function

class FunctionDispatcher(ABC):
    @abstractclassmethod
    def dispatch(self, function : iterator_function.IteratorFunction):
        pass
iterator_function.py,这是导入的类。注意:提示
:function\u dispatcher.FunctionDispatcher
的类型在此工作

import function
import function_dispatcher

class IteratorFunction(function.Function):
    def accept(self, dispatcher : function_dispatcher.FunctionDispatcher):
        dispatcher.dispatch(self)
这是回溯输出:

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'
1>回溯(最近一次呼叫最后一次):
1> 文件“C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\Preprocessor\main.py”,第1行,在
1> 导入生成器
1> 文件“C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\Preprocessor\generator.py”,第3行,在
1> 从迭代器函数导入迭代器函数
1> 文件“C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\Preprocessor\iterator\u function.py”,第1行,在
1> 导入功能
1> 文件“C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\Preprocessor\function.py”,第2行,在
1> 导入函数\u调度程序
1> 文件“C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\Preprocessor\function\u dispatcher.py”,第4行,在
1> 类函数调度程序(ABC):
1> 文件“C:\Users\admin\Documents\visual studio 2015\Projects\Preprocessor\Program\Preprocessor\function\u dispatcher.py”,第6行,在FunctionDispatcher中
1> def调度(self,function:iterator_function.IteratorFunction):
1> AttributeError:模块“迭代器函数”没有属性“迭代器函数”
对于想知道我在做什么的人来说:实现。

是正确的。我能够解决循环导入并维护类型检查。虽然没有那么干净,但它确实管用

function.py

from abc import ABC, abstractmethod

class Function(ABC):
    def __init__(self, arguments, min_arguments):
        self.arguments = arguments
        self.min_arguments = min_arguments if len(arguments) < min_arguments else len(arguments)

    @abstractmethod
    def accept(self, dispatcher):
        pass

    def test_dispatcher(self, dispatcher):
        import function_dispatcher
        if not isinstance(dispatcher, function_dispatcher.FunctionDispatcher):
            raise Exception("Not of type FunctionDispatcher")
import function

class IteratorFunction(function.Function):
    def accept(self, dispatcher):
        self.test_dispatcher(dispatcher)
        dispatcher.dispatch(self)
看起来你有一个好朋友。