gpt4 book ai didi

python - 从文件读取并根据文件输入实例化新类

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:44 24 4
gpt4 key购买 nike

我正在尝试存储一个对类 ID 进行编码的文件,读取该文件并调用该类,以便 ->在文件中,数据将存储为

id_class:(arguments)

读取的文件将从文件列表中查找正确的类来调用并传递参数。

像这样:

class foo:
id = 1
def __init__(self):
self.attr = 10
def __str__(self):
return str(self.attr)


class bar:
id = 2
def __init__(self):
self.attr = 20
def __str__(self):
return str(self.attr)


def create_foo():
return foo

def create_bar():
return bar

class_dict = {1:create_foo(),2:create_bar()}

class_index = [1,2,1,2,1,1,1,2,2,2,1] #data read from file

class_list = [] #output list containing the newly instanciated bar or foo

for index in class_index:
c = class_dict[index]
class_list.append(c)

但是这段代码附加在class_list中,例如foo,但只是一个类,因为如果我修改属性,就会修改整个列表。

例如:

for classe in class_list:
print classe,

print "\n-------------"
class_list[0].attr = 15

for classe in class_list:
print classe,

输出是:

10 20 10 20 10 10 10 20 20 20 10 
-------------
15 20 15 20 15 15 15 20 20 20 15

应该是:

10 20 10 20 10 10 10 20 20 20 10 
-------------
15 20 10 20 10 10 10 20 20 20 10

最佳答案

我更改了两个 create 方法 - 它们缺少括号,没有它们就不会创建对象的新实例。另外,我更改了 class_dict,因此它不会调用 create 方法,而是将实例化推迟到访问 class_dict 时: class_dict[索引]()。修改后的代码如下所示:

class foo:
id = 1
def __init__(self):
self.attr = 10

class bar:
id = 2
def __init__(self):
self.attr = 20

def create_foo():
return foo()

def create_bar():
return bar()

class_dict = {1:create_foo,2:create_bar}

class_index = [1,2,1,2,1,1,1,2,2,2,1] #data read from file

class_list = [] #output list containing the newly instanciated bar or foo

for index in class_index:
c = class_dict[index]()
class_list.append(c)

for classe in class_list:
print str(classe.attr),

print "\n-------------"
class_list[0].attr = 15

for classe in class_list:
print str(classe.attr),

关于python - 从文件读取并根据文件输入实例化新类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com