gpt4 book ai didi

Python:快速和肮脏的数据类型(DTO)

转载 作者:太空狗 更新时间:2023-10-29 17:03:32 24 4
gpt4 key购买 nike

很多时候,我发现自己在编写一些琐碎的数据类型,例如

class Pruefer:
def __init__(self, ident, maxNum=float('inf'), name=""):
self.ident = ident
self.maxNum = maxNum
self.name = name

虽然这非常有用(显然我不想用匿名三元组替换上面的内容),但它也是非常样板的。

现在例如,当我想在字典中使用类时,我必须添加更多样板,例如

    def __hash__(self):
return hash(self.ident, self.maxNum, self.name)

我承认可能很难在我所有的样板类中识别出一个通用模式,但尽管如此我还是想回答这个问题:

  • 有没有在 python 中使用命名访问器派生快速和脏数据类型的流行习惯用法?

  • 或者如果没有,也许 Python 大师可能想炫耀一些元类黑客或类工厂来让我的生活更轻松?

最佳答案

>>> from collections import namedtuple
>>> Pruefer = namedtuple("Pruefer", "ident maxNum name")
>>> pr = Pruefer(1,2,3)
>>> pr.ident
1
>>> pr.maxNum
2
>>> pr.name
3
>>> hash(pr)
2528502973977326415

要提供默认值,您需要多做一点......简单的解决方案是为 __new__ 方法编写子类:

>>> class Pruefer(namedtuple("Pruefer", "ident maxNum name")):
... def __new__(cls, ident, maxNum=float('inf'), name=""):
... return super(Pruefer, cls).__new__(cls, ident, maxNum, name)
...
>>> Pruefer(1)
Pruefer(ident=1, maxNum=inf, name='')

关于Python:快速和肮脏的数据类型(DTO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933419/

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