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