如何将一个数据 class 与另一个数据一起提供?

How to feed one data class with another?

我正在尝试构建一个简单的应用程序来进行比较、将对象添加到名人堂列表等操作。我很确定 Owner class 构建正确,但是当用 Owner 对象喂养 HallOfFame 对象时,我得到很多错误。

该应用目前看起来是这样的:

from dataclasses import dataclass
from typing import List


@dataclass
class Owner:
    name: str
    qty_of_belongings: int

    def __eq__(self, other):
        return self.qty_of_belongings == other.qty_of_belongings

    def __str__(self):
        return f"{self.name}: {str(self.qty_of_belongings)}"


@dataclass
class HallOfFame:
    owner: Owner
    hall_of_fame: List[Owner]

    def add(self, owner):
        return self.append(owner)

定义 Owner 对象和基本操作,如打印或比较,工作正常:

o1 = Owner("Grace", 5)
o2 = Owner("Sharon", 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'

我知道这是一个菜鸟问题,但不知何故我无法接受数据的概念 classes...应该怎么做才能使其按预期工作,例如将业主添加到名人堂名单?

第二个class看起来不应该是数据class

你可以正常class
它是 __init__ 和您需要的其他方法 (__str__, __eq__, ...)

数据classes是用来存储数据的
像其他语言中的 structs
具有内置功能(哈希、相等性...)

我也错误评论__init__会被覆盖
它不会,但建议使用 __post_init__ 而不是
因为 dataclass 将成为一个方便的构造函数