如何使用“collections.abc”中的自定义元类和子类创建类?

2024-09-23 00:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我认为问题很清楚。举个例子来说明我想要达到的目标

from collections.abc import MutableMapping

class MyMeta(type):
    def __new__(mcs, name, bases, attr):
        return type.__new__(mcs, name, bases, attr)

class MyMutableMappingMeta(MutableMapping, MyMeta):
    def __hash__(self):
        return hash(tuple(self.__dict__.items()))

class MyClass(metaclass=MyMutableMappingMeta):
    pass

但是当我尝试检查子类时,会出现错误

issubclass(MyClass, MutableMapping)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File ".../venv/lib/python3.7/abc.py", line 143, in __subclasscheck__
    return _abc_subclasscheck(cls, subclass)
  File ".../venv/lib/python3.7/abc.py", line 143, in __subclasscheck__
    return _abc_subclasscheck(cls, subclass)
TypeError: __subclasses__() missing 1 required positional argument: 'self'

Tags: nameinselfnewreturndeftypeline