gpt4 book ai didi

python - DataClass 是否适合替换字典?

转载 作者:行者123 更新时间:2023-12-04 14:37:24 26 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

去年关闭。




Improve this question




我在代码中经常使用字典作为数据结构。而不是返回多个值 Tuple就像 Python 允许的那样:

def do_smth():
[...]
return val1, val2, val3

我更喜欢使用具有命名键优势的字典。
但是对于复杂的嵌套字典,很难在其中导航。几年前我用 JS 编码时,我也喜欢字典,因为我可以将子部分称为 thing.stuff.foo IDE 帮助我构建了结构。

我刚刚发现新 DataClass在 python 中,除了替换字典之外,我不确定这是什么原因?对于我读过的 DataClass内部不能有函数,并且简化了其参数的初始化。

我想对此发表评论,你如何使用 DataClass ,或关于 Python 中的字典。

最佳答案

数据类更像是 NamedTuples 的替代品,然后是字典。

虽然 NamedTuples 被设计为不可变的,但数据类可以通过设置 frozen=True 来提供该功能。在装饰器中,但总体上提供了更大的灵活性。

如果您进入 type hints在您的 Python 代码中,它们确实发挥了作用。

另一个优点就像你说的 - 复杂的嵌套字典。您可以将数据类定义为您的类型,并以清晰简洁的方式在数据类中表示它们。

考虑以下:

@dataclass
class City:
code: str
population: int


@dataclass
class Country:
code: str
currency: str
cities: List[City]


@dataclass
class Locations:
countries: List[Country]


然后,您可以编写函数,在其中使用数据类名称注释函数参数作为类型提示并访问它的属性(类似于传入字典并访问它的键),或者构建数据类并输出它,即

def get_locations(....) -> Locations:
....

它使代码非常易读,而不是一个庞大的复杂字典。

您还可以设置默认值,这在 NamedTuples 中是不允许的,但在字典中是允许的。

@dataclass
class Stock:
quantity: int = 0

您还可以控制是否希望在装饰器中对数据类进行排序等,就像是否希望将其卡住一样,而普通字典则不进行排序。 See here for more information

如果需要,您可以获得对象比较的所有好处,即 __eq__()等等。它们也默认带有 __init____repr__所以你不必像普通类一样手动输入这些方法。

还有对字段的更多控制,允许元数据等。

最后,您可以通过导入 from dataclasses import dataclass asdict 最后将其转换为字典。

关于python - DataClass 是否适合替换字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com