使用字典在循环中创建不同的实例
Creating different instances in a loop using a dictionary
我希望用户定义一系列字符串
user_input = ('cat', 'cactus', 'cat')
对应于从可能对象的字典中实例化的一系列对象
classes = {
'cat': Cat,
'cactus': Cactus,
}
其中 Cat
和 Cactus
对应于父 class
的 classes
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')
但是当我这样做时,出现了异常,告诉我 "type no exist" 当字符串与字典条目完全对应时!为什么会这样?
然后我想像这样使用pet_types
pet_500 = pet_types[500](name,colour)
捕获任何异常 (except:
) 是一种狡猾的做法,就像用您自己的异常隐藏原始异常一样,甚至不记录它。
在这种情况下,这两种狡猾做法的结合掩盖了您有错字的事实,并且您正在尝试访问未定义的 pet_type
(单数),而不是您实际拥有的变量 - pet_types
(复数)。修复它,你应该没问题。
我希望用户定义一系列字符串
user_input = ('cat', 'cactus', 'cat')
对应于从可能对象的字典中实例化的一系列对象
classes = {
'cat': Cat,
'cactus': Cactus,
}
其中 Cat
和 Cactus
对应于父 class
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')
但是当我这样做时,出现了异常,告诉我 "type no exist" 当字符串与字典条目完全对应时!为什么会这样?
然后我想像这样使用pet_types
pet_500 = pet_types[500](name,colour)
捕获任何异常 (except:
) 是一种狡猾的做法,就像用您自己的异常隐藏原始异常一样,甚至不记录它。
在这种情况下,这两种狡猾做法的结合掩盖了您有错字的事实,并且您正在尝试访问未定义的 pet_type
(单数),而不是您实际拥有的变量 - pet_types
(复数)。修复它,你应该没问题。