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_fish。如第一个例子中那样包含变量“fish_class”是否有优势? 另外,我一直无法找到有关在类 init 方法中将默认值设置为参数的Python文档。你能指点我解释一下它的运作方式吗?
答案 0 :(得分:1)
除了硬编码SchoolOfFish
之外,它允许您使用不同类型的Fish
类。
在上面的示例中,默认值为Fish
,但在调用构造函数时,可以在运行时指定另一个类。
编辑re:默认args:
关于__init__
中的默认args,它在概念上与在任何其他方法/函数中为参数设置默认值没有任何不同。只需指定x=y
,其中x
是参数名称,y
是其默认值。
答案 1 :(得分:1)
据推测,您可以初始化SchoolOfFish
种不同类型的鱼。
如果未指定fish_class
,则提供的构造函数都提供默认值,然后默认构建通用Fish
列表。
但是,fish_class
允许您指定某类鱼类。
例如,您可能希望初始化Baracuda
或Snapper
的学校,这两个学校都是通用Fish
课程的子类。
(实际上,代码中没有任何内容确保fish_class
实际上是Fish
类,您可以使用fish_class = Dog
调用构造函数。