Python中的继承,要求在子类中定义某些方法

时间:2014-10-18 23:38:29

标签: python oop inheritance

例如,在Java中,您可以使用某些指定但未在MyClass 中实现的方法创建一个MyClass类,但必须在从MyClass继承的任何类MySubClass中实现< / strong>即可。所以基本上你想要的所有子类中都有一些共同的功能,所以你把它放在MyClass中,并且每个子类都有一些独特的(但是需要的)功能,所以你需要在每个子类中。 如何在Python中实现此行为?

(我知道有简明的术语来描述我所要求的内容,所以请随时告诉我这些是什么以及如何更好地描述我的问题。)

2 个答案:

答案 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,但只有在调用该方法时才会中断。如果你有全面的单元测试,你应该这样做,这不会成为问题。