使用字典在循环中创建不同的实例

时间:2017-10-08 20:42:28

标签: python class oop dictionary instantiation

我想用户定义一系列字符串

user_input = ('cat', 'cactus', 'cat')

对应于要从可能对象的字典中实例化的一系列对象

classes = {
    'cat': Cat,
    'cactus': Cactus,
 }

CatCactus对应于从父类下降的类

class Pet():
    ...

class Cat(Pet):
    def __init__(self, name, colour):
        Pet.__init__(self, name, colour)
        ...

class Cactus(Pet):
    def __init__(self, name, colour):
        Pet.__init__(self, name, colour)
        ...

我尝试将对象类型添加到列表

pet_types = []
for i in range(0,3):
    try:
        pet_type.append(classes[user_input[i]])
    except:
        raise Exception('type no exist')

但是当我这样做的时候会引发异常,告诉我"输入不存在"当字符串与字典条目完全对应时!为什么会这样?

然后我想像这样使用pet_types

pet_500 = pet_types[500](name,colour)

1 个答案:

答案 0 :(得分:3)

捕获任何异常(except:)都是一种狡猾的做法,就像隐藏原始异常一样,甚至没有记录它。

在这种情况下,这两种狡猾的做法的结合隐藏了这样一个事实:你有一个错字,并且你试图访问未定义的pet_type(单数),而不是你实际拥有的变量 - pet_types(复数)。解决它,你应该没事。