我正在编写一个类,它从 api 获取外部对象,对该对象执行一些处理,公开一些有用的方法,然后将处理后的对象写入数据库。在外部对象不再存在的情况下,我希望类方法使用数据库记录中的数据。
这导致类方法中出现大量重复的简单代码:
class Synchronised_object:
def __init__(self, obj=None, rec=None):
self.object = obj
self.record = rec
def a(self):
if self.object:
return self.object.a
else:
return self.record['a']
def b(self):
if self.object:
return self.object.b.upper()
else:
return self.record['b']
函数中重复的简单代码听起来像是装饰器的一个很好的用例,但在这种情况下,装饰器代码将依赖于实例化类对象的属性,从我在这里和其他地方读到的所有内容来看,这似乎都是有问题的。
有没有办法写一个依赖于 self.object 的装饰器?如果没有,是否有另一种方法可以减少“if self.object...else return self.record[name]”的重复?
您实际上只需要一个处理延迟记录逻辑的方法。比如:
class SynchronisedObject:
def __init__(self, obj=None, rec=None):
self.object = obj
self.record = rec
def _proxy(self, attr):
if self.object:
return getattr(self.object, attr)
return self.record[attr]
def a(self):
return self._proxy("a")
def b(self):
return self._proxy("b").upper()