代码之家  ›  专栏  ›  技术社区  ›  Vasilis Lemonidis

python 3.7:继承列表,已忽略抽象[重复]

  •  7
  • Vasilis Lemonidis  · 技术社区  · 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()
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Netwave    7 年前

    我认为这里的问题是你不应该直接继承 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]
    
    推荐文章