通知子类应该在python中实现一个方法的异常

Man*_*áoz 10 python design-patterns coding-style exception

假设我想在python中创建一个抽象类,其中一些方法由子类实现.(在Python中)

例如:

class Base():
    def f(self):
        print "Hello."
        self.g()
        print "Bye!" 

class A(Base):
    def g(self):
        print "I am A"

class B(Base):
    def g(self):
        print "I am B"
Run Code Online (Sandbox Code Playgroud)

我希望如果基类被实例化并调用其f()方法,当调用g()时,会引发异常,通知子类应该实现方法g().

这里常见的事情是什么?我应该引发NotImplementedError吗?或者有更具体的方法吗?

非常感谢!
曼努埃尔

Ale*_*lli 13

在Python 2.6及更高版本中,您可以使用abc模块创建Base"实际"抽象基类:

import abc

class Base:
    __metaclass__ = abc.ABCMeta
    @abc.abstractmethod
    def g(self):
        pass
    def f(self): # &c
Run Code Online (Sandbox Code Playgroud)

这保证了Base无法实例化 - 并且任何子类都不能覆盖g- 同时满足@Aaron允许子类super在其g实现中使用的目标.总的来说,这是一个比我们以前在Python 2.5及更早版本中提供的更好的解决方案!

附注:从对象继承Base将是多余的,因为无论如何都需要显式设置元类.

  • 就像一个侧节点:在Python 3.x中,元类定义如下:class Base(metaclass = abc.ABCMeta):... (2认同)