当前位置: 首页 > 面试题库 >

将默认列表参数传递给数据类

潘银龙
2023-03-14
问题内容

我想在我的课程中传递默认参数,但是不知何故我遇到了问题:

from dataclasses import dataclass, field
from typing import List

@dataclass
class Pizza():
    ingredients: List = field(default_factory=['dow', 'tomatoes'])
    meat: str = field(default='chicken')

    def __repr__(self):
        return 'preparing_following_pizza {} {}'.format(self.ingredients, self.meat)

如果现在尝试实例化Pizza,则会出现以下错误:

>>> my_order = Pizza()
Traceback (most recent call last):
  File "pizza.py", line 13, in <module>
    Pizza()
  File "<string>", line 2, in __init__
TypeError: 'list' object is not callable

我究竟做错了什么?


问题答案:

从该dataclasses.field文档:

要使用的参数field()是:

  • default_factory: 如果提供, 则必须为零参数可调用对象
    ,当此字段需要默认值时将被调用。除其他用途外,这可用于指定具有可变默认值的字段,如下所述。同时指定default和default_factory是错误的。


default_factory不是可调用的0参数,而是一个列表,这是导致错误的原因:

@dataclass
class Pizza():
    ingredients: List = field(default_factory=['dow', 'tomatoes'])  # <- wrong!

改用lambda函数:

@dataclass
class Pizza():
    ingredients: List = field(default_factory=lambda: ['dow', 'tomatoes'])


 类似资料:
  • 问题内容: 我在我们的存储过程中使用了一个表值参数。这是我使用的语法: (是用户定义的表类型)。 但是,作为要求,我需要将默认值传递给此表值参数。 但是上面的代码会引发语法错误。是否可以将默认值传递给表值参数?有人可以帮我吗? 问题答案: 您可以默认通过TVP: 这相当于一个空表。

  • 问题内容: 我想按值将列表传递给函数。默认情况下,列表和其他复杂对象通过引用传递给函数。这是一些目标: 可以写得短些吗?换句话说,我不想更改 ad 。 问题答案: 您可以使用,但是对于包含列表(或其他可变对象)的列表,您应该使用: 等价于或,并返回列表的浅表副本。 何时使用:

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 如何将参数传递给表单? 根据以下答案进行编辑: 问题答案: 你应该定义表单的方法,如下所示: 没有意义。创建表单后,必须将属性添加到窗口小部件。尝试这样的事情:

  • 问题内容: 在我的RCP应用程序中,左侧有一个用于导航的视图,右侧有一个用于视图的文件夹。透视图看起来像这样: 我想根据用户在导航树中选择的内容打开不同的视图。认为这并不难。我的导航树视图: 这似乎很好。仅有一个小问题:我需要以某种方式将对象(例如,selectedItem)传递给我的视图,以使用户与其内容进行交互。我怎么做? 我看到了一些示例,其中一些同事编写了自己的视图,并将其放置在右侧。然后