假设我有一个动物名称列表,我想将它们映射到这样的特定对象。
class Dog(object)
__init__(self,name,weight)
def run()
...
class Cat(object)
__init__(self,name,weight)
def run()
...
图:
"baily" => Cat
"rocky" => Dog
"daisy" => Cat
我应该使用什么pythonic数据结构来创建这个映射?我希望能够做类似
的事情animal = map['baily']('baily',33LB)
animal.run()
答案 0 :(得分:2)
听起来最像Pythonic的方式是继承它们,但是因为你有字符串我们会尽量避免这种情况。
为什么不使用字典?
class Dog(object):
...
class Cat(object):
...
class_mapping = {"baily":Cat, "rocky":Dog, "daisy":Cat}
animal = class_mapping["baily"]('baily', 33LB)
另一种可能性是构建一个知道可能输入的函数(或者可以对它们执行一些内省)来分配正确的类。例如:
def Meta_Animal(name,*args,**kwargs):
# I use class naming on this because it always produces a class
if name.lower() in ['baily','daisy']:
return Cat(name,*args, **kwargs)
elif name.lower() in ['rocky']:
return Dog(name,*args, **kwargs)
else:
raise NotImplementedError("That name is not an animal")