温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Dynamically generated class and variable name

python - 动态生成的类和变量名

发布于 2020-03-28 23:40:04

我有这样的csv,

name,job
Jay,engineer
Kay,layer
hop,warrior

然后我将其加载pandas datafrme并放入数据库

df = pd.read_csv('job.csv')

for index,row in df.iterrows():
   q = Issue(name = row[0],job = row[1])
   q.save()
   print ("Register : ",row[0] , " / ",row[1])
exit()

它运作良好,但现在,我想将此代码概括为如下所示的函数。

def stor_db(classname):
    df = pd.read_csv(classname + '.csv')

    for index,row in df.iterrows():
       q = `classname`(
           `title[0]ofdf` = row[0],
           `title[1]ofdf` = row[1])
       q.save()
       print ("Register : ",row[0] , " / ",row[1])
    exit()

我需要动态地创建变量/类名。

可能是python和pandas吗?

查看更多

查看更多

提问者
whitebear
被浏览
16
polku 2020-01-31 19:11

Python中的所有内容都是一个对象,包括类。

内置的type()主要用于检查变量类型,但用途最少。如果type()与3个参数一起使用,它将创建一个新的Object类型。

第一个参数是您的类的名称,第二个参数是用于继承的基类的元组,第三个是将成为__dict__属性的dict。

Example = type("Example", (object,), {"a" : 0})

# equivalent to

class Example(object):
    def __init__(self):
        self.a = 0

所以你可以做这样的事情

   Example = type(classname, (object,), {title[0]ofdf = row[0], title[1]ofdf = row[1]})

继承具有所需方法而不是对象的基类,您将拥有所需的通用方法。

编辑:

如果您的类是Django模型,它将完全改变问题的性质,并且此解决方案不相关。您的模型已经存在,因此您实际上并不希望动态创建类,而是动态选择模型。

我想我将使用__class __.__ name_的load_from_csv方法,该方法通过继承共享,并使用kwargs作为构造函数的参数(假设models属性与csv列完全匹配)。

发布
问题

分享
好友

手机
浏览

扫码手机浏览