Python中的继承?

use*_*424 3 python

假设我有以下python基类:

class BaseClass(object):
    def a():
        """This method uses method b(), defined in the inheriting class"""
Run Code Online (Sandbox Code Playgroud)

还有一个继承的类BaseClass:

class UsedByUser(BaseClass):
    def b():
        """b() is defined here, yet is used by the base class"""
Run Code Online (Sandbox Code Playgroud)

我的用户只会创建类的实例UsedByUser.典型用途是:

if __name__ == '__main__':
    # initialize the class used by the user        
    usedByUser = UsedByUser()

    # invoke method a()
    usedByUser.a()
Run Code Online (Sandbox Code Playgroud)

我的问题是,上述使用是否有问题?这是一个有效的办法,还是要我还定义方法b()BaseClass,然后覆盖它UsedByUser

Gar*_*Jax 7

我也会定义b方法BaseClass:

class BaseClass(object):
    def b(self):
        raise NotImplementedError('b must be implemented by a subclass')
Run Code Online (Sandbox Code Playgroud)

请记住:显式优于隐式,并且假设该方法a需要该方法b,更好地提出一个有意义的异常而不是一般AttributeError.

值得指出的是,从语法的角度来看,这绝对不是必需的,但它增加了代码的清晰度并强制子类提供实现.