Python中的合成

Python中的合成,python,composition,Python,Composition,我用作文写了这堂课 我的狗: 定义初始自我、计数、食物、品种: self.count=计数 食物 自我繁殖 食物类别: 定义初始自我,食品: 食物 等级品种: 定义初始自我、品种名称、产地: self.breed\u name=breed\u name self.origin=origin 食品=[] 食品 品种=[] 品种:墨西哥新品种 myDog=MyDog1、食物、品种 在MyDog类中是否有其他方法初始化食物和品种? 另外,这个类的用户如何知道这个类需要什么样的列表呢?我不完全确定你在问

我用作文写了这堂课

我的狗: 定义初始自我、计数、食物、品种: self.count=计数 食物 自我繁殖 食物类别: 定义初始自我,食品: 食物 等级品种: 定义初始自我、品种名称、产地: self.breed\u name=breed\u name self.origin=origin 食品=[] 食品 品种=[] 品种:墨西哥新品种 myDog=MyDog1、食物、品种 在MyDog类中是否有其他方法初始化食物和品种?
另外,这个类的用户如何知道这个类需要什么样的列表呢?

我不完全确定你在问什么。但是关于初始化食物和品种,你可以像现在一样初始化它们,但是在MyDog类中。您可以在MyDog初始化类中初始化默认的食物和品种,而不是将食物和品种传递给MyDog初始化类。然后,如果需要,可以在MyDog类中使用另一个函数将其更改为新函数


如果您正在编写一个供其他人使用的类,那么还应该编写相应的文档,以解释该类的预期内容和功能。我建议您查找Python文档字符串。

我认为在这种情况下不需要使用组合

class MyDog:
    def __init__(self, count=None, foods=None, breeds=None):
        """
        Parameters
        ----------
        count : int 
        foods : list , for example: ['rice', 'vegetable']
        breeds : list of dictionary, for example [ {'name': x, 'origin': y},  ]
        """
        self.count = count
        self.__initialize_foods__(foods)
        self.__initialize_breeds__(breeds)

    def __initialize_foods__(self, foods):
        if foods is None:
            self.foods = []
        else:
            self.foods = foods

    def __initialize_breeds__(self, breeds):
        if breeds is None:
            self.breeds = []
        else:
            self.breeds = breeds

    def eat_food(self, food=None):
        self.foods.append(food)
    def eat_foods(self, foods=None):
        self.foods = foods

    def breed(self, breed=None):
        self.breeds.append(breed)
    def breeds(self, breeds=None):
        self.breeds = breeds

type1 = {"name": "new_type", "origin": "mexico"}
type2 = {"name": "hulk", "origin": "usa"}
myDog = MyDog(1, ["rice", "beef"], [type1, type2])

在MyDog的init中初始化是一种好的做法吗?如果我没有任何默认值,那么我可以用空列表初始化吗?