【问题标题】:When and why would I set a variable for another class in a new class init as an argument?我何时以及为什么要在新类 init 中为另一个类设置一个变量作为参数?
【发布时间】:2014-05-25 23:00:55
【问题描述】:
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 文档。你能给我解释一下它是如何工作的吗?

【问题讨论】:

  • 您是否经常更改fish_class 以至于需要使其可配置?如果不是,那么这只会增加不必要的复杂性。 在类__init__ 方法中设置默认值作为参数是什么意思
  • 对于这个程序,没有 fish_class 不会改变,所以它是不必要的复杂性。我可能在这里使用了错误的词,但我很好奇在 init 方法参数中设置 SchoolOfFish 的属性值,例如 def __init__(number_of_fish=1)。正确的术语是什么?
  • 至于你的第二个问题,它们只是被称为默认参数值:docs.python.org/2/tutorial/…

标签: python class arguments


【解决方案1】:

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

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

编辑回复:默认参数:

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

【讨论】:

    【解决方案2】:

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

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

    但是,fish_class 允许您指定特定类别的鱼。

    例如,您可能想要初始化Baracuda 的学校或Snapper 的学校,这两者都是通用Fish 类的子类。

    (实际上,代码中没有任何内容可以确保fish_class 实际上是Fish 类,您可以使用fish_class = Dog 调用构造函数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多