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

Python 何时以及为什么要在新类init中为另一个类设置变量作为参数?,python,class,arguments,Python,Class,Arguments,这两个类的作用相同,即使用前一个类“fish”的实例填充SchoolOfFish.list_of_fish。在第一个示例中包含变量“fish_class”是否有好处? 此外,我还找不到关于在类init方法中将默认值设置为参数的Python文档。你能给我解释一下这是怎么回事吗 它允许您将SchoolOfFish类与不同类型一起使用,而不仅仅是硬编码的Fish 在上面的示例中,默认值是Fish,但是在调用构造函数时,可以在运行时指定另一个类 编辑re:默认参数: 关于\uuuu init\uuuu中

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

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

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

编辑re:默认参数:


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

您可能可以初始化不同鱼类的
SchoolOfFish

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

但是,
fish\u class
允许您指定特定类别的鱼

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


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

您是否经常更改
fish_class
以使其可配置?如果没有,那么这只会增加不必要的复杂性。将class
\uuu init\uuu
方法中的默认值设置为参数是什么意思?对于这个程序,fish\u类不会更改,因此它不需要复杂度。我可能在这里使用了错误的词,但我对在init方法参数中设置SchoolOfFish的属性值感到好奇,例如def u init uu(number_of_fish=1)。正确的术语是什么?至于第二个问题,它们被称为默认参数值:
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))