我有一个数据建模任务,假设我有一个要识别的生物,所以我从Creature
类实例化一个对象。
class Animal:
# ...
class Cow(Animal):
# ...
class Duck(Animal):
# ...
animal = Animal()
# other logic to specify some attributes of the animal
animal.weight = 50
现在我不知道它是哪种动物,
animal.sound = animal.get_sound()
然后我产卵了许多这样的动物,以便稍后确定它们的确切类别。
如果动物发出'Moo',我想重新实例化Cow
类中的这个动物对象,如果动物发出'quack',我要重新实例化Duck
类中的对象。
我不想只实例化一个新对象,必须保留先前指定的属性,例如年龄或体重。
def test_sound_to_determine_class(some_animal):
if some_animal.sound == 'Moo':
# cow = ???
# >>> cow.weight
# >>> 50
elif some_animal.sound == 'quack':
# duck = ???
# >>> duck.weight
# >>> 50
我知道我可以通过__init__
函数填充属性值,该函数可以从父级继承,但是我的属性列表确实很长。有什么办法优雅地处理这个问题?