例如,在 Java 中,您可以使用某些方法来创建类 MyClass,这些方法是指定的,但未在 MyClass 中实现,但是 必须在继承自 MyClass 的任何类 MySubClass 中实现。所以基本上你想要的所有子类之间都有一些通用的功能,所以你把它放在 MyClass 中,并且每个子类都有一些独特的(但必需的)功能,所以你想要它在每个子类中。 如何在 Python 中实现这种行为?
(我知道有一些简洁的术语可以描述我的问题,所以请随时让我知道这些术语是什么以及如何更好地描述我的问题。)
abc
文档提供了更多内容
import abc
class Foo():
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def bar(self):
raise NotImplemented
class FooBar(Foo):
pass
f = FooBar()
TypeError: Can't instantiate abstract class FooBar with abstract methods bar
编辑: 在 Python3 中,语法略有不同:
import abc
class Foo(object, metaclass=abc.ABCMeta):
@abc.abstractmethod
def bar(self):
raise NotImplementedError
class FooBar(Foo):
pass
f = FooBar()
您不能以编译时中断的方式要求在子类中实现方法,但是在基类上编写必须在子类中实现的方法的约定是引发
NotImplementedError
。
类似这样的:
class MyBase(object):
def my_method(self, *args, **kwargs):
raise NotImplementedError("You should implement this method on a subclass of MyBase")
然后你的子类可以实现
my_method
,但这只有在调用该方法时才会中断。如果您有全面的单元测试(您应该这样做),这不会是问题。