Python 导入筛选器-TypeError:type()不';不支持MRO入口解析
Python 3.7.1,过滤器1.3.2 导入过滤器 回溯(最近一次呼叫最后一次): 文件“”,第1行,在Python 导入筛选器-TypeError:type()不';不支持MRO入口解析,python,Python,Python 3.7.1,过滤器1.3.2 导入过滤器 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“E:\anaconda3\lib\site packages\filters\\uuuu init\uuuuu.py”,第27行,在这里的过滤器和类注册表的维护器中。很抱歉,我花了这么长时间才找到这个 该问题是由类注册表包中的几行引起的: class BaseRegistry(with_metaclass(ABCMeta, Mapping)): ... class Mut
文件“E:\anaconda3\lib\site packages\filters\\uuuu init\uuuuu.py”,第27行,在这里的过滤器和类注册表的维护器中。很抱歉,我花了这么长时间才找到这个 该问题是由类注册表包中的几行引起的:
class BaseRegistry(with_metaclass(ABCMeta, Mapping)):
...
class MutableRegistry(with_metaclass(ABCMeta, BaseRegistry)):
...
出现此错误的原因是with_metaclass()
在内部创建了一个动态类型,当它与映射和可变映射等泛型类型一起使用时,会发生冲突
讨论了该问题,结果似乎是“按预期工作”:
这不是一个bug,而是一个明确的设计决策。泛型类是静态类型化概念,因此不应在动态类创建中自由工作。在讨论PEP 560时,决定至少有一种方法可以动态创建泛型类,类型。为此选择了新类,请参见
关于这一点,异常消息也非常清楚。不幸的是,PEP 560和557是并行讨论的,因此并非所有可能的交互都是经过深思熟虑的。但是数据类调用类型
是否很关键?我相信类型与new\u class
应该没有其他区别。我想说后者甚至比type
更好,因为它正确地处理了元类IIRC上的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因此,我建议从type()
切换到types.new\u class()
来动态创建数据类
有两种可能的方法来解决此问题:
使用添加\u元类()
而不是使用添加\u元类()
放弃对Python2的支持,用Python-3风格的基本/元类声明替换为_metaclass()
这两种解决方案均以提交的方式表示
我不再在EFL Global[现在是LenddoEFL]工作,因此我不再直接接触该回购协议。新版本发布可能需要一段时间;与此同时,我已经完成了这个项目,并发布了一个明确支持Python 3.7的新版本(并放弃了对Python 2的支持):
什么是过滤器
?@HåkenLid Hey@stkubr过滤器项目的维护者;刚刚看到你的问题。这是由于-今天正在进行修复
class BaseRegistry(with_metaclass(ABCMeta, Mapping)):
...
class MutableRegistry(with_metaclass(ABCMeta, BaseRegistry)):
...