python使用不同的父类作为子类



使用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()。因此,在运行时动态更改parentclass。

事实上,我最大的问题是如何处理django模块的导入。我如何才能防止这种情况在脱机模式下发生(因为没有设置django环境,所以会失败)。我的想法是将iModelWithDjango()放在一个单独的模块文件中(如上所述),但也许有更好的方法可以做到这一点。

也许有了很多混乱的编码,我可以做到这一点,但我希望你们中的一些人能引导我进行一些干净的编码实践。任何建议欢迎

如果我很理解您的问题,您希望有条件地将模块链接(导入)到您的项目。有多种方法可以做到这一点

一种方法是:

if standAlone:
  from iModel import IModel
  runner = IModel
else:
  from iModelWithDjango import IModelWithDjango
  runner = IModelWithDjango
runner().run()

相关内容

  • 没有找到相关文章

最新更新