问题:我有一个类,其中包含一个execute调用另一个方法的模板方法_execute。子类应该重写_execute以实现某些特定功能。此功能应记录在 的文档字符串中_execute。高级用户可以创建自己的子类来扩展库。但是,处理此类子类的另一个用户应该只使用execute,因此如果他使用 ,他将看不到正确的文档字符串help(execute)。
因此,最好以这样的方式修改基类,以便在子类中 的文档字符串execute自动替换为 的文档字符串_execute。有什么想法可以做到这一点吗?
我正在考虑使用元类来做到这一点,使这对用户完全透明。
好吧,如果您不介意在子类中复制原始方法,则可以使用以下技术。
import new
def copyfunc(func):
return new.function(func.func_code, func.func_globals, func.func_name,
func.func_defaults, func.func_closure)
class Metaclass(type):
def __new__(meta, name, bases, attrs):
for key in attrs.keys():
if key[0] == '_':
skey = key[1:]
for base in bases:
original = getattr(base, skey, None)
if original is not None:
copy = copyfunc(original)
copy.__doc__ = attrs[key].__doc__
attrs[skey] = copy
break
return type.__new__(meta, name, bases, attrs)
class Class(object):
__metaclass__ = Metaclass
def execute(self):
'''original doc-string'''
return self._execute()
class Subclass(Class):
def _execute(self):
'''sub-class doc-string'''
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |