【发布时间】:2014-12-16 22:36:01
【问题描述】:
我有许多子类的基类,子类中唯一改变的是某个方法(模板模式)。但是我被卡住了,无法让它工作。
class Base(models.Model):
_value = models.CharField(max_length=200)
_name = models.CharField(max_length=200)
user = models.ForeignKey(User, related_name="some_set")
#used as a property
def value():
def fget(self):
self.refresh()
return self._value
def refresh(self):
raise NotImplementedError("..")
class Subclass1(Base):
def refresh(self):
self._value = some_val
class Subclass2(Base):
def refresh(self):
self._value = some_other_val
我希望能够将整个相关集视为同一个实体,并在每个实体上调用 value 属性,每个实体都遵循其自己实现的刷新版本,即
for x in user.some_set.all():
print x.value
但在这一点上似乎不可能,即使在超类中删除刷新也是如此。我也考虑过使用 Strategy 模式并使用 ForeignKey 关系来调用该方法,但我仍然必须在 ForeignKey 中有一个子类派生自的基类。
【问题讨论】:
标签: python django python-2.7 design-patterns django-1.6