Я думаю, что это расширение к другому вопросу
Фон
Работая с python 2.7, у меня есть класс
class Report(object):
def translate_report(self, report_entity):
... # Process report_entity dictionary and return results
# But there is a legacy report class too
class Legacy_Report(object):
def translate_report(self, legacy_report_entity):
... # Process report_entity dictionary in different way and return results
report_entity
- это словарь, выгружаемый в виде строки в текстовом файле. Объекты словаря варьируются в зависимости от Report
и Legacy_Report
.
Требование
Я воссоздаю экземпляр объекта с помощью этого словаря и вызываю translate_report
. Вызывающий метод не зависит от того, является ли объект устаревшей версией или новой.
Мой подход
class Legacy_Report(object):
@staticmethod
def _legacy_translation(legacy_report_entry):
... # Process
return legacy_report_entry
def __call__(self, underlying_function):
def wrapper_func(self, report_object):
if 'legacy' in report_object.keys():
return Decorator._legacy_translation(report_object)
else:
return underlying_function(self, report_object)
return wrapper_func
class Report(object):
@Legacy_Report()
def translate_report(self, report_entity):
... # Process report_entity
return report_entity
Вопрос
Пока это работает, это правильный путь для достижения этого?
Может быть, декоратор на каком-то другом уровне или какой-нибудь лучший питонский способ?