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]
以下不提:
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]