如何在Python中基于属性选择子类

如何在Python中基于属性选择子类,python,django,Python,Django,对于Django项目,我有一个父类和几个子类。 在Django管理后端中,我希望能够选择正确的子类并使用其属性和方法 这就是我的想法: class Parent: _name = "parent" class Child1(Parent): _name = "child 1" class Child2(Parent): _name = "child 2" 在管理员界面中,用户应该能够从下拉列表中选择“儿童1”或“儿童2” 稍后在API中,应根据属性名选择子类 当然,

对于Django项目,我有一个父类和几个子类。
在Django管理后端中,我希望能够选择正确的子类并使用其属性和方法

这就是我的想法:

class Parent:
    _name = "parent"

class Child1(Parent):
    _name = "child 1"

class Child2(Parent):
    _name = "child 2"
在管理员界面中,用户应该能够从下拉列表中选择“儿童1”或“儿童2”

稍后在API中,应根据属性名选择子类

当然,我可以创建一个包含类名和属性名的字典,然后使用很多
if
elif
语句,但这不是正确的做法


我该如何解决这个问题,或者我只是在想一个完全错误的方向?

制作一个包含子类的字典,并将属性作为键,然后始终像这样使用它:

class Parent:
    _name = "parent"

class Child1(Parent):
    _name = "child 1"

class Child2(Parent):
    _name = "child 2"

mydict = {'thisone': Child1, 'thatone': Child2}

myinstance = mydict['thisone']()
你甚至可以:

mydict = {Child1._name: Child1, 
          Child2._name: Child2}
使用str:

class Parent(object):
    _name = "parent"
    def __str__(self):
        return self._name
尝试:

str应该返回一个值,而不是打印它
>>> class Parent(object):
>>>    _name = "parent"
>>>    def __str__(self):
>>>        return self._name

>>> class Child1(Parent):
>>>    _name = "child 1"    
>>> class Child2(Parent):
>>>    _name = "child 2"

>>> c1 = Child1()
>>> c2 = Child2()
>>> print c1
child 1
>>> print c2
child 2