2014-01-24 78 views
1

我碰到过一种情况,我有一个基类和多个派生类。在每个派生类中,我正在执行从提供给方法的输入中提取公共数据的操作。因此,我已经将这段代码作为方法写在基类中,以便派生类可以直接使用它。但是我想从每个要执行此操作的方法调用此函数。我的问题是,我可以为这个动作写一个装饰器吗?我想让这个装饰器成为基类的成员。 是否有可能使用基类方法作为派生类中的装饰器?使用基类方法作为派生类中的装饰器

+1

你能提供的这些方法的一个例子吗?我没有看到在派生类方法中应用装饰器和在派生类方法内调用基类方法(通过“super”或直接通过类名称)之间的区别。 – chepner

+0

对于各种内部API,有多个请求处理程序。所有这些处理程序都有调用这些API的方法。这些内部API中的每一个都需要请求头部,这是请求的一部分。所以在每个方法中,我必须从传入的请求中提取此信息以形成调用API所需的头。因此,为了避免代码的重复,我创建了一个基类并将这些代码写入基类方法。但是现在我想使用这个基类方法作为派生类中的装饰器。我怎么做?如果您需要更多详细信息,请告诉我。 – gliese581g

+1

从派生类方法内部调用基类方法不会比必须将装饰器应用于每个派生类方法更为重复,而且更易于实现和读取。 – chepner

回答

1

基类:

class BaseRequestHandler(object): 

    def __init__(self): 
     self.request=None 
     self.response=None 

    def extractheader(self,requestin): 
     ##extracts header from incoming request 

派生类:

class DerivedRequestHandler1(BaseRequestHandler): 

    def __init__(self): 
     super(DerivedRequestHandler1, self).__init__() 

    def handlermethod(self,requestin) 
     ##extract headed 
     ##call internal API with header