2014-01-24 3 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 
Смежные вопросы