所以我试图让一个包含大量对象的文件看起来像这样:
<class 'oPlayer.oPlayer'>,123,4,<class 'CommonObject.Wall'>,175,4,<class 'CommonObject.Wall'>,25,654,<class 'CommonObject.Wall'>,1,123,<class 'CommonObject.Wall'>,55,87
(没有用于分割目的的换行符)
该文件包含对象名称,x和y坐标。 (基本信息)但我不是100%确定如何从文件中创建对象。这就是我所拥有的:
def loadRoom(self, fname):
# Get the list of stuff
openFile = open(fname, "r")
data = openFile.read().split(",")
openFile.close()
# Loop through the list to assign said stuff
for i in range(len(data) / 3):
# Create the object at the position
newObject = type(data[i * 3])
self.instances.append(newObject(int(data[i * 3 + 1]), int(data[i * 3 + 2])))
文件中的对象都有两个参数,x和y。所以我也对如何工作感到困惑。我所做的是用所有拆分字符串抓住列表(我显示的是,它出来是正确的。没有\ n)然后我遍历列表(排序)来设置所有数据。我假设type
将返回该对象,但事实并非如此。
非常感谢任何有关该主题的帮助。
答案 0 :(得分:-1)
尝试从中获取方法 Get python class object from string:
import importlib
...
for i in range(len(data) / 3):
# get object data
cls = data[i * 3]
x = int(data[i * 3 + 1])
y = int(data[i * 3 + 2])
# get module and class
module_name, class_name = cls.split(".")
somemodule = importlib.import_module(module_name)
# instantiate
obj = getattr(somemodule, class_name)(x, y)
self.instances.append(obj)
这是一个完整的示例(将其放在名为getattrtest.py
的文件中):
import importlib
class Test1(object):
def __init__(self, mx, my):
self.x = mx
self.y = my
def printit(self):
print type(self)
print self.x, self.y
class Test2(Test1):
def __init__(self, mx, my):
# changes x and y parameters...
self.y = mx
self.x = my
def main():
cls = 'getattrtest.Test2'
# get module and class
module_name, class_name = cls.split(".")
somemodule = importlib.import_module(module_name)
# instantiate
obj = getattr(somemodule, class_name)(5, 7)
obj.printit()
if __name__ == "__main__":
main()
使用Python 2.7进行测试