在现有的Python代码中,我有一个基类CfgParam
,它由PersistentCfgParam(CfgParam)
、EncryptedCfgParam(CfgParam)
等子类层次结构扩展。每个子类都有自己的save()
方法,而基类没有:
class CfgParam:
def __init__(self, key, value):
...
class EncryptedCfgParam(CfgParam):
...
def save(self):
...
我需要提供使任何子类只读的可能性。如果可以的话,我很乐意在基类中添加一个可选的readonly
初始化参数:
class CfgParam:
def __init__(self, key, value, readonly=False):
self.readonly = readonly
...
def save(self):
if self.readonly:
return # And possibly complain
# Now, call save() of the subclass???
但是显然没有“调用子类的方法”这样的东西,而且不管怎么说,子类都会调用自己的save()
,而不是父类的一个。
是否有一种方法可以避免修改save()
方法在中每个子类?
发布于 2014-12-19 01:39:54
不,你是对的,你不能那样做。
最佳实践总是从子类方法中调用超类方法,因此如果您能够保证这一点,就可以在那里进行检查。
但是,更好的方法可能是将实现与save
方法本身分开。这样,子类可以覆盖实现,但是检查仍然保留在主保存中:
class CfgParam(object):
...
def save(self):
if not self.readonly:
self._save_impl()
def _save_impl(self):
raise NotImplementedError
class EncryptedCfgParam(CfgParam):
def _save_impl(self):
... actual subclass save implementation ...
https://stackoverflow.com/questions/27562953
复制相似问题