Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从类型类字符串创建类的实例,如';集装箱。房间';?_Python_Python 2.7 - Fatal编程技术网

Python 从类型类字符串创建类的实例,如';集装箱。房间';?

Python 从类型类字符串创建类的实例,如';集装箱。房间';?,python,python-2.7,Python,Python 2.7,我是编程新手,我选择了Python。我经历了所有学习python的艰难过程,我编写了自己的“选择你自己的冒险游戏”,现在我开始创建更类似于MOO的东西 我已经将我的对象数据库构建得非常简单(游戏中的所有东西都是对象,一个单独的属性数据库将有助于自定义对象)。当前对象结构如下所示: typeclass = args['typeclass'].split('.') import_path = "objects.%s" % typeclass[0] _temp = impor

我是编程新手,我选择了Python。我经历了所有学习python的艰难过程,我编写了自己的“选择你自己的冒险游戏”,现在我开始创建更类似于MOO的东西

我已经将我的对象数据库构建得非常简单(游戏中的所有东西都是对象,一个单独的属性数据库将有助于自定义对象)。当前对象结构如下所示:

    typeclass = args['typeclass'].split('.')
    import_path = "objects.%s" % typeclass[0]

    _temp = importlib.import_module(import_path)
    myobj = getattr(_temp, typeclass[1])

    return myobj(args['name'], args['locationid'])
objectid、名称、类型类、位置ID

locationid是返回同一objectid的外键,这样对象就可以属于房间或玩家

我的问题是如何设置typeclass。目前,我想在其中存储一个字符串,如:containers.Room。当我从数据库中提取信息(或创建一个新的文件室)时,我希望能够创建一个包含在名为containers的单独python脚本中的class room()实例。我知道要从容器导入室进行导入,但我不知道如何从存储的字符串动态地进行导入

提前感谢所有可能知道并与我分享答案的人

为清晰起见进行编辑(我漫不经心地说…)


我想从数据库中提取一个字符串(“module.Class”),导入该模块和类,并创建该类的实例

edit2 使用sqlite,下面是我的创建命令。最后,我想返回typeclass的一个实例

def create(self, **args):
    #requires name=string and typeclass=string.  no locationid for rooms
    #connect to the sqlite db and create a cursor for commands
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()


    #probably a better way to do this, but this is what I came up with
    columns = []
    values = []
    for k, v in args.iteritems():
        #iterate through arguments, if the column ends in 'id' assume int
        columns.append(k)
        if k[-2:] == "id":
            values.append("%s" % v)
        else:
            values.append(("'%s'" % v))

    #join columsn and rows and plug them into the query
    cols = ', '.join(columns)
    rows = ', '.join(values)

    query = "INSERT INTO objects_db (%s) VALUES (%s)" % (cols, rows)

    #execute the query, commit, and close the connection.
    cursor.execute(query)
    conn.commit()
    conn.close()

    >>> stuff here to import args['typeclass'] <<<
def创建(self,**参数):
#需要name=string和typeclass=string。没有房间的locationid
#连接到sqlite数据库并为命令创建光标
conn=sqlite3.connect(DB_路径)
游标=连接游标()
#也许是更好的方法,但这就是我想到的
列=[]
值=[]
对于args.iteritems()中的k,v:
#如果列以“id”结尾,则遍历参数
列。追加(k)
如果k[-2::][=“id”:
值。追加(“%s”%v)
其他:
值。追加((“'%s'”%v))
#连接columnsn和rows并将它们插入查询
cols=','.join(列)
行=','。连接(值)
query=“插入到对象中\u数据库(%s)值(%s)”%(列,行)
#执行查询、提交并关闭连接。
cursor.execute(查询)
康涅狄格州提交
康涅狄格州关闭

>>>在这里输入args['typeclass'],所以我发现问题是因为在直接运行db.py脚本进行测试时试图从同级导入模块

我在项目的根目录中创建了一个main.py文件,允许我执行以下操作:

    typeclass = args['typeclass'].split('.')
    import_path = "objects.%s" % typeclass[0]

    _temp = importlib.import_module(import_path)
    myobj = getattr(_temp, typeclass[1])

    return myobj(args['name'], args['locationid'])

我正在使用的create函数只用于对象,所以我可以假设一个objects文件夹。所以我只需要things.Thing部分,所以我可以拆分它,导入脚本并获取属性,然后从那里运行。

请编辑您的问题以便更清楚些?我想从我的数据库中提取一个字符串(“module.Class”),导入该模块和类,你能解释一下你的数据库是什么样的,或者粘贴一些示例行吗?它是csv文件吗?粘贴了我的创建函数代码。