我认为这是另一个question
的扩展背景
使用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
问题
虽然可行,但这是实现此目标的正确方法吗?
也许是其他级别的装饰器,还是更好的pythonic方法?
答案 0 :(得分:0)
只使用继承。
class Report(object):
def translate_report(self, report_entity):
... # Process report_entity dictionary and return results
class Legacy_Report(Report):
def translate_report(self, legacy_report_entity):
... # Process the legacy report differently