作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
很多时候,我发现自己在编写一些琐碎的数据类型,例如
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/
当我序列化以下内容时: [Serializable] public class Error { public string Status { get; set; } public st
我是一名优秀的程序员,十分优秀!