假设我有一对基类,其中一个实例化另一个:
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_class
和AnimalHome
类上定义特殊的类方法Cattery
,只是返回适当的动物类:
def instantiate_animal(self, *args, **kwargs):
return Animal(*args, **kwargs)
在Animal
类中,并且
def instantiate_animal(self, *args, **kwargs):
return Cat(*args, **kwargs)
在Cat
类中,还是有更好的方法?
答案 0 :(得分:4)
您可以将其设置为类变量,而不是实例化该类的方法:
class AnimalHome:
animal_class = None
class Cattery(AnimalHome):
animal_class = Cat
# self.animal_class will be Cat in Cattery's methods