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设置为一个普通类会让事情更清楚。如果你能给出一个例子,我会接受的。