如何在保留Python中的属性的同时从子类重新实例化对象?

时间:2019-05-29 07:05:55

标签: python class

我有一个数据建模任务,假设我有一个要识别的生物,所以我从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__函数填充属性值,该函数可以从父级继承,但是我的属性列表确实很长。有什么办法优雅地处理这个问题?

0 个答案:

没有答案