作者:yuliu预留 | 来源:互联网 | 2022-12-06 13:33
我想在我的班级中传递默认参数,但不知何故我遇到了问题:
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)
如果我打字
>>> my_order = Pizza()
Traceback (most recent call last):
File "pizza.py", line 13, in
Pizza()
File "", line 2, in __init__
TypeError: 'list' object is not callable
我收到以下错误:
-------------------------------------------------- ------------------------- AttributeError Traceback(最近一次调用last)in()----> 1 Pizza.ingredients
AttributeError:类型对象'Pizza'没有属性'ingredients'
编辑:对于类实例我收到以下错误:
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)
-------------------------------------------------- ------------------------- TypeError Traceback(最近一次调用last)in()----> 1 my_order = Pizza()
在init(自我,成分,肉)
TypeError:'list'对象不可调用
编辑2:
快速检查Pizza
以下产量:
>>> my_order = Pizza()
Traceback (most recent call last):
File "pizza.py", line 13, in
Pizza()
File "", line 2, in __init__
TypeError: 'list' object is not callable
有Pizza
但不Pizza
1> Aran-Fey..:
从该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'])