【发布时间】:2014-04-25 21:03:06
【问题描述】:
我们正在使用 python 和 django 创建一个框架来运行许多科学模型。 Python 运行模型,django 用于跟踪状态并创建网页输出。在操作模式下,这可以正常工作,因为整个平台(数据库、django 可执行文件)都可用。但是对于新模型的离线创建和测试,我的同事们经常在独立的代码上工作,与环境没有任何联系。那么django部分往往是一个负担(环境,数据库需要设置,计算开销)。所以我们正在寻找一种方法来打开和关闭 Django 功能。
目前我们有一个通用类 iModel,它具有在框架中运行任何模型的所有功能,还有一些 django 调用。子类继承自此类,并包含特定于模型的功能。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "framework.settings")
import django.some.modules
class iModel(iModel):
def run(self):
some django calls (eg. change status in DB to 'running')
self.prepareInputdata()
self.runModel()
some more calls (eg. change status in DB to 'finished')
def prepareInputData(self):
example of some code that is used by all child models
class CATmodel(iModel):
def runModel(self):
some specific code for CAT-model
class DOGmodel(iModel):
def runModel(self):
some specific code for DOG-model
我正在考虑将 iModel 类拆分为两个类。一个额外的类 iClassWithDjango(),它将继承自 iModel 并添加 Django 功能。作为 iModel 类的包装器。
头等舱
class iModel(Object):
def run(self):
self.prepareInputDate()
self.runModel()
二等舱
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "framework.settings")
import django.some.modules
class iModelWithDjango(iModel):
def run(self):
some django calls (eg. change status in DB to 'running')
super(iModelWithDjango,run)
some more calls (eg. change status in DB to 'finished')
根据情况(运行或离线)DOGmodel 和 CATmodel 将分别继承。来自 iModelwithDjango() 或 iModel()。所以在运行时动态改变父类。
其实我最大的问题是如何处理 django 模块的导入。我怎样才能防止这种情况在离线模式下发生(因为它会因为 django 环境没有设置而失败)。我的想法是将 iModelWithDjango() 放在一个单独的模块文件中(如上所述),但也许有更好的方法来做到这一点。
也许我可以通过大量杂乱的编码来解决这个问题,但我希望你们中的一些人可以引导我进行一些干净的编码练习。欢迎任何建议
【问题讨论】:
标签: python django oop inheritance dynamic-class-creation