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

Python 3.7: Inheriting list, abstract ignored

本问题已经有最佳答案,请猛点这里访问。

以下不引发:

1
2
3
4
5
6
from abc import ABCMeta, abstractmethod
class Test(list, metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass
test = Test()

虽然这样:

1
2
3
4
5
6
from abc import ABCMeta, abstractmethod
class Test(metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass
test = Test()

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


我认为这里的问题是你不应该直接从list继承。 collections 中有一些用于执行此操作的package类。在这种情况下 UserList:

1
2
3
4
5
6
7
from abc import ABCMeta, abstractmethod
from collections import UserList
class Test(UserList, metaclass=ABCMeta):
    @abstractmethod
    def test(self):
        pass
test = Test()

这里有来自

的实时示例

1
2
3
4
5
6
7
8
class Test1(Test):
  def test(self):
    print("foo")

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

结果:

1
2
foo
[10]