Python: 强制执行抽象方法

Python: enforcing abstract method

我编写了以下代码来演示必须由其子class 实现的抽象方法。我读到,当父 class 中的方法被装饰为抽象时,其子 class 必须实现它,否则无法实例化。但是,在下面的代码中,'Slug' subclass 没有实现抽象方法,但它仍然可以实例化而不会抛出错误。我想在这种情况下 Python 会抱怨吗?

我是不是误会了什么?

谢谢

import abc

class Animal(object):

    __metaclass__ = abc.ABCMeta

    def __init__(self, species):
        self._species=species

    def get_species(self):
        return self._species

    @abc.abstractmethod
    def eat(self):
        pass

class Slug(Animal):

    def __init(self, species):
        super(species)

    def run(self):
        print("running")

    # def eat(self):
    #     pass


sl = Slug("slug")
print(sl.get_species())

不,你完全理解!只是 abc.ABCMeta 的 python 3 语法是:

class Animal(metaclass=abc.ABCMeta):
    ...

而不是 python 中使用的 __metaclass__ = abc.ABCMeta 2. 或者您可以继承 ABCclass Animal(abc.ABC):。参见 doc

然后:

class Slug(Animal):

    def __init(self, species):
        super.__init__(species)

    ...

这将导致

Traceback (most recent call last):
  File "/home/.../...py", line 33, in <module>
    sl = Slug("slug")
TypeError: Can't instantiate abstract class Slug with abstract methods eat