如何将一个数据 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是用来存储数据的
像其他语言中的 struct
s
具有内置功能(哈希、相等性...)
我也错误评论__init__
会被覆盖
它不会,但建议使用 __post_init__
而不是
因为 dataclass
将成为一个方便的构造函数
我正在尝试构建一个简单的应用程序来进行比较、将对象添加到名人堂列表等操作。我很确定 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是用来存储数据的
像其他语言中的 struct
s
具有内置功能(哈希、相等性...)
我也错误评论__init__
会被覆盖
它不会,但建议使用 __post_init__
而不是
因为 dataclass
将成为一个方便的构造函数