Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为一个数据类提供另一个数据类?_Python_Python 3.x_Python Dataclasses - Fatal编程技术网

Python 如何为一个数据类提供另一个数据类?

Python 如何为一个数据类提供另一个数据类?,python,python-3.x,python-dataclasses,Python,Python 3.x,Python Dataclasses,我正在尝试构造一个简单的应用程序来进行诸如比较、将对象添加到名人堂列表等操作。我非常确定Owner类的构建是正确的,但是在将HallOfFame对象与Owner对象一起馈送HallOfFame对象时,我会遇到许多错误 到目前为止,该应用程序看起来如下所示: 从数据类导入数据类 从输入导入列表开始 @数据类 类所有者: 姓名:str 物品数量:整数 定义(自身、其他): 返回自己的物品数量==其他物品数量 定义(自我): 返回f“{self.name}:{str(self.qty\u物品)}” @

我正在尝试构造一个简单的应用程序来进行诸如比较、将对象添加到名人堂列表等操作。我非常确定
Owner
类的构建是正确的,但是在将
HallOfFame
对象与
Owner
对象一起馈送
HallOfFame
对象时,我会遇到许多错误

到目前为止,该应用程序看起来如下所示:

从数据类导入数据类
从输入导入列表开始
@数据类
类所有者:
姓名:str
物品数量:整数
定义(自身、其他):
返回自己的物品数量==其他物品数量
定义(自我):
返回f“{self.name}:{str(self.qty\u物品)}”
@数据类
类别名称:
业主:业主
名人堂:名单[所有者]
def添加(自身、所有者):
返回self.append(所有者)
定义
Owner
对象和基本操作(如打印或比较)效果很好:

o1=所有者(“Grace”,5)
o2=所有者(“沙龙”,3)
但当我进一步尝试定义与
HallOfFame
相关的任何内容时,如下所示:

hof=HallOfFame()
hof.add(o1)
问题开始出现:

Traceback (most recent call last):
  File "[...]/ranks_2.py", line 29, in <module>
    hof = HallOfFame()
TypeError: __init__() missing 2 required positional arguments: 'owner' and 'hall_of_fame'
回溯(最近一次呼叫最后一次):
文件“[…]/ranks_2.py”,第29行,在
hof=HallOfFame()
TypeError:\uuuuu init\uuuuuuuuuu()缺少2个必需的位置参数:“所有者”和“名人堂”

我知道这是一个新手问题,但不知何故我不能接受数据类的概念。。。如何使其按预期工作,例如将所有者添加到名人堂列表中?

第二个类看起来不应该是dataclass

你只需要上普通课
它是
\uuuuu init\uuuuuu
和您需要的其他方法(
\uuuuuu str\uuuuu
\uuuu eq\uuuuu
,…)

数据类用于存储数据
与其他语言中的结构类似
struct
s
具有内置功能(哈希、相等等)

我还错误地评论说,
\uuuu init\uuu
将被覆盖
不会,但建议使用
\uuu post\u init\uuu
代替

因为
dataclass
将成为一个方便的构造函数

默认构造函数期望参数初始化类变量。与您在
Owner
中看到的内容相同。如果这不是你想要的-创建你自己的
\uuuu init\uuuu()
@PM77-1,他可以创建
\uu post\uu init\uuuuu
,因为
\uuu init\uuuuuu
会被覆盖@我不认为第二个应该是dataclass,我建议您创建一个普通类。数据类通常只用于存储某些数据,如其他语言中的
struct
s。如果未通过,则始终可以将
hall\u of \u fame
作为可选值初始化为
[]
所有者
似乎应该是必需的,或者从定义中删除。(这两个字段的语义都不清楚。)@Superior:谢谢你的提示:将HallOfFame设置为一个普通类会让事情更清楚。如果你能给出一个例子,我会接受的。