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