从列表动态创建类实例



我试图从列表中创建一个类的新实例。一切似乎都工作,但如果我向列表添加一个新值并创建app类的新实例,我将得到KeyError。我不知道我是否必须完全放弃这条路,或者是否有解决办法。

class app:
def __init__(self):
self.app=None
def start_app(self):
return self.app.start()
def stop_app(self):
return self.app.stop()
def return_app(self):
return self.app
list=[123456,654321]
myapp = {k: app() for k in list}
print("1 my list: ",list)
print ("1 my app: ",myapp)
myapp[(list[0])].__init__
x=myapp[(list[0])].start_app
list.append(789000)
print("2 my list: ",list)
print ("2 my app: ",myapp)
myapp[(list[0])].__init__
print(myapp[(list[2])].start_app())

和错误:

1 my list:  [123456, 654321]
1 my app:  {123456: <__main__.app object at 0x7ff6916a53d0>, 654321: <__main__.app object at 0x7ff6916a5430>}
2 my list:  [123456, 654321, 789000]
2 my app:  {123456: <__main__.app object at 0x7ff6916a53d0>, 654321: <__main__.app object at 0x7ff6916a5430>}
Traceback (most recent call last):
File "/testCopia.py", line 25, in <module>
print(myapp[(list[2])].start_app())
KeyError: 789000

当你运行app()时,app类的实例被创建,你只在分配给myapp时做。当您向list添加一个新键时(您应该使用不同的名称,这是一个现有的类型),您需要调用app(),并且可能还需要向myapp添加新的(kay, value)对。

根据我的评论,在这行之后:

list.append(789000)

你需要添加:

myapp[789000] = app()

最新更新