Python中的合成

2024-09-25 10:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我用作文写了这堂课

class MyDog:
    def __init__(self, count, foods, breeds):
        self.count = count
        self.foods = foods
        self.breeds = breeds
    
class Eatfood:
    def __init__(self, food):
        self.food = food
    
class Breed:
    def __init__(self, breed_name, origin):
        self.breed_name = breed_name
        self.origin = origin
            
foods = []
foods.append(Eatfood("rice"))
    
breeds = []
breeds.append(Breed("newType", "Mexico"))
    
myDog = MyDog(1, foods, breeds)

MyDog类中是否有其他方法初始化食物和品种?
另外,这个类的用户如何知道这个类需要什么样的列表


Tags: nameselffoodinitdefcountoriginclass
2条回答

我不完全确定你在问什么。但是关于初始化食物和品种,你可以像现在一样初始化它们,但是在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])

相关问题 更多 >