类名和导入为Python中的变量

时间:2017-04-10 13:54:14

标签: python

我想要一个单独的Python代码,我可以在其中定义必须在项目开始时创建的默认.py文件,具体取决于我想要的模型。因此,当我开始一个新项目时,我不必从其他项目复制代码并调整类名等。例如,我想自动创建一个model_1.py:

class Model1(object):
   code

和model_2.py:

class Model2(object):
   code

我希望从另一个文件创建这些文件,我在其中定义必须创建的模型。例如:

models = ['Model1', 'Model2']

是否可以将类名作为变量?如下所示:

class models[0]()

此外,导入部分可能类似吗?所以

from model_type_x.test import *

其中model_type_x是变量?

还有哪些其他可能性?让Python创建一个文本文件并将其转换为.py文件?

2 个答案:

答案 0 :(得分:0)

您需要this名为cookiecutter的模块。您可以拥有项目的模板,并为它们配置提示以创建项目

答案 1 :(得分:0)

首先,python文件只是文本文件。您只需使用.py扩展名保存它们。

您尝试实现的内容或多或少超出了python的范围。 Python本身不会生成代码。如果要生成代码,可以使用任何您喜欢的语言的模板。它并不重要,因为代码不会被执行。

类名和导入名称不能是变量。这些是语法糖,允许您定义类型或导入代码。

如果要使用变量名导入,可以导入模块:

__import__(module_name)

其中module_name是一个变量,所以你可以在运行时导入模块,如果你能猜出它们是如何被调用或将要导入的......尽管可以这样做,但我不建议使用这种方法,因为它是因为我们通常事先知道我们要导入的是什么,所以非常难看并且几乎没用。你可以随时使用“*”,但这也不是一个特别好的主意,因为模块中的某些东西不会被导出,通常最好明确告诉你要导入的内容。

class models[0]()

这显然是不可能的,关键字类用于定义类型。另一方面,你可以做的是:

locals()[models[0]] = type(models[0], parent_tuple, attributes)

但访问locals()以使用type构造函数定义一个局部变量来手动定义一个新类型,而不是使用class关键字使事情更容易阅读...没有必要这样做。

这里真正的问题是......你想要实现什么?您可能无法找到解决您没有的问题的正确解决方案。