如何从字符串创建Python类?

时间:2015-04-25 04:33:11

标签: python class file-io

所以我试图让一个包含大量对象的文件看起来像这样:

<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将返回该对象,但事实并非如此。

非常感谢任何有关该主题的帮助。

1 个答案:

答案 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进行测试