我想在Python中实现一个转发类,实现一些基类,在它的构造函数中引入同一基类的另一个实现,然后针对基类中的每个方法转发到该类。在
这对于提供定制点非常有用,可以为某些方法添加缓存,在每个调用站点上进行日志记录等等。在
手工写这个很简单。给定这个基类:
class BaseClass(object):
def method_a(self, *args):
pass
@property
def prop_b(self):
pass
def method_c(self, a, b, **kwargs):
pass
下面是一个简单的转发实现。在
^{pr2}$编写代码的缺点是有很多样板代码,并且必须为每个方法编写这些代码。当方法被添加到基类中时,类似的代码必须被添加到转发类中;如果需要更改类的转发方式,则必须在所有方法中传播这些更改。(例如,想象一下,我们希望更改类,以便它使用一个上下文管理器来处理每个调用。)
有没有一种简短的python方法来实现这一点,要么使用基本语言,要么使用内置模块,要么使用PyPI上的一些可靠模块?在
所需功能:
*args, **kwargs
@property
修饰符的方法被正确包装__<method>__
方法(如果存在)被正确包装dir(instance)
执行的操作与直接实现相同很高兴有:
@staticmethod
修饰符的方法被转发到传入实现的类@classmethod
修饰符的方法被转发到传入实现的类__init__
和{可能存在额外复杂性的地方:
__<method>__
及其语义不在乎:
@property
、@staticmethod
和{
只是为了澄清我的意见:我的意思是+/-这个(需要更多的工作,尽管。。。再次强调:可能无法满足您的所有要求):
请注意,由于python name mangling,您将无法以这种方式访问以
__
开头的成员。在相关问题 更多 >
编程相关推荐