我试图从列表中创建一个类的新实例。一切似乎都工作,但如果我向列表添加一个新值并创建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()