很多时候,我发现自己正在编写一些琐碎的数据类型,例如
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)
我承认,在我的所有样板类中识别通用模式可能很困难,但尽管如此,我还是想问这个问题:
>>> 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__
method:
>>> 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='')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)