簡體   English   中英

Python:執行抽象方法

[英]Python: enforcing abstract method

我編寫了以下代碼來演示必須由其子類實現的抽象方法。 我讀到,當父類中的方法裝飾為抽象時,其子類必須實現它,否則無法實例化。 但是,在以下代碼中,“ Slug”子類未實現abstract方法,但仍可以實例化而不會引發錯誤。 我以為在這種情況下,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 2中使用的__metaclass__ = abc.ABCMeta 。或者,您也可以僅繼承自ABCclass Animal(abc.ABC): 文檔

接着:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM