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



以下不会引发:

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()

这里有来自的实时示例

class Test1(Test):
def test(self):
print("foo")
test = Test1()
test.append(10)
test.test()
print(test)

结果:

foo
[10]

最新更新