首页 > 解决方案 > 从列表动态创建类实例

问题描述

我正在尝试从列表中创建一个类的新实例。一切似乎都有效,但如果我向列表中添加一个新值并创建一个新的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

标签: pythonpython-3.x

解决方案


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


推荐阅读