假设我有以下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?
我也会定义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.
值得指出的是,从语法的角度来看,这绝对不是必需的,但它增加了代码的清晰度并强制子类提供实现.