Python 3.x Python3.5类型暗示给出了;属性错误:模块';迭代器函数';没有属性';迭代器函数'&引用;
当我尝试向自定义类键入提示时,python将在“module.class”上抛出AttributeError。Intellisence告诉我,导入是正确的,可以找到类 函数_dispatcher.py,此文件中的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
: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)
看起来你有一个好朋友。