[英]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
。或者,您也可以僅繼承自ABC
: class 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.