在两个相关的类中使用继承的最佳方法是什么

时间:2019-06-30 14:57:17

标签: python oop inheritance

假设我有一对基类,其中一个实例化另一个:

class Animal:
    def __init__(self, name):
        self.name = name

class AnimalHome:
    def __init__(self, location):
        self.location = location

    def populate_home(self):
        self.animal1 = Animal(name='Rex')
        self.animal2 = Animal(name='Barney')

现在,我想要一个派生的AnimalHome类,在其中要使用其他派生的Animal实例类:

class Cat(Animal):
    # Interesting properties of cats defined here ...

class Cattery(AnimalHome):
    def populate_home(self):
        self.animal1 = Cat(name='Fluffy')
        self.animal2 = Cat(name='Trixie')

    # Interesting properties of Catteries defined here ...

我必须在方法populate_home中重复基本上相同的代码,以使用Cat类而不是Animal类。避免这种重复的最佳方法是什么?

我应该在get_animal_classAnimalHome类上定义特殊的类方法Cattery,只是返回适当的动物类:

def instantiate_animal(self, *args, **kwargs):
    return Animal(*args, **kwargs)

Animal类中,并且

def instantiate_animal(self, *args, **kwargs):
    return Cat(*args, **kwargs)

Cat类中,还是有更好的方法?

1 个答案:

答案 0 :(得分:4)

您可以将其设置为类变量,而不是实例化该类的方法:

class AnimalHome:
    animal_class = None

class Cattery(AnimalHome):
    animal_class = Cat

    # self.animal_class will be Cat in Cattery's methods