例如,在Java中,您可以使用某些指定但未在MyClass 中实现的方法创建一个MyClass类,但必须在从MyClass继承的任何类MySubClass中实现< / strong>即可。所以基本上你想要的所有子类中都有一些共同的功能,所以你把它放在MyClass中,并且每个子类都有一些独特的(但是需要的)功能,所以你需要在每个子类中。 如何在Python中实现此行为?
(我知道有简明的术语来描述我所要求的内容,所以请随时告诉我这些是什么以及如何更好地描述我的问题。)
答案 0 :(得分:4)
一个非常基本的例子,但abc
docs提供了更多
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
答案 1 :(得分:3)
您不能以在编译时中断的方式在子类中实现方法,但是在基类上编写必须在子类中实现的方法的约定是NotImplementedError
。
这样的事情:
class MyBase(object):
def my_method(self, *args, **kwargs):
raise NotImplementedError("You should implement this method on a subclass of MyBase")
然后您的子类可以实现my_method
,但只有在调用该方法时才会中断。如果你有全面的单元测试,你应该这样做,这不会成为问题。