Python 3.7:继承列表,忽略抽象

Python 3.7: Inheriting list, abstract ignored

以下不提:

from abc import ABCMeta, abstractmethod
class Test(list, metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass
test = Test()

尽管这样做:

from abc import ABCMeta, abstractmethod
class Test(metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass
test = Test()

这是一个已知问题吗?我能做些什么来修复它?我需要从看起来完全像列表的东西继承并创建一个抽象继承者。谢谢。

我认为这里的问题是你不应该直接继承自list。在 collections 中有一些包装器 类 可以做到这一点。在这种情况下 UserList:

from abc import ABCMeta, abstractmethod
from collections import UserList
class Test(UserList, metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass
test = Test()

这里有 live example 来自:

class Test1(Test):
  def test(self):
    print("foo")

test = Test1()
test.append(10)
test.test()
print(test)

结果:

foo
[10]