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. 或者您可以继承 ABC
:class 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
我编写了以下代码来演示必须由其子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. 或者您可以继承 ABC
:class 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