我什么时候以及为什么要在新类init中为另一个类设置一个变量作为参数?

2024-09-30 00:29:05 发布

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

class SchoolOfFish:
    def __init__(self, position, fish_class=Fish, number_of_fish=1):
        self.position = position
        self.timer = 0
        self.list_of_fish = []
        for i in range(number_of_fish):
            self.list_of_fish.append(fish_class(screen.size / 2))

class SchoolOfFish:
    def __init__(self, position, number_of_fish=1):
        self.position = position
        self.timer = 0
        self.list_of_fish = []
        for i in range(number_of_fish):
            self.list_of_fish.append(Fish(screen.size / 2))

这两个类的作用是相同的,即用前一个类“fish”的实例填充SchoolOfFish.list\ of\ u fish。在第一个例子中包含变量“fish\ u class”有好处吗? 另外,我还找不到关于将classinit方法中的默认值设置为参数的Python文档。你能给我解释一下这是怎么回事吗


Tags: ofinselfnumberforinitdefposition
2条回答

它允许您将SchoolOfFish类与其他类型一起使用,而不仅仅是硬编码的Fish

在上面的示例中,默认值是Fish,但是当调用构造函数时,可以在运行时指定另一个类

编辑re:默认参数:

关于__init__中的默认参数,它在概念上与为任何其他方法/函数中的参数设置默认值没有任何区别。只需指定x=y,其中x是参数名,y是其默认值

大概你可以初始化不同种类的鱼

提供的两个构造函数都提供了一个默认值,如果未指定fish_class,则默认为构造泛型Fish的列表

但是,fish_class允许您指定某类鱼

例如,您可能希望初始化一个Baracuda学校或Snapper学校,这两个学校都是泛型Fish类的子类

(实际上,代码中没有任何东西可以确保fish_class实际上是一个Fish类,您可以用fish_class = Dog调用构造函数)

相关问题 更多 >

    热门问题