Python 导入筛选器-TypeError:type()不';不支持MRO入口解析

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

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 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)):
        ...