- 模块内实现一个
NamedTuple
类,其构造函数接受 iterable 和 fields 两个参数,分别用于传递数据及其对应的别名
- NamedTuple 需要支持通过位置索引和别名属性两种方式去获取数据
- NamedTuple repr 输出格式类似于”NamedTuple(x=1, y=2)“,其中 x、y 是别名,1、2 是数据。
class NamedTuple(tuple):
def __init__(self,value,fields):
self.value = value
self.fields=fields
data = dict(zip(self.fields, self.value))
for k, v in data.items():
self.__setattr__(k, v)
super(NamedTuple,self).__init__()
def __new__(_cls,value,fields):
return tuple.__new__(_cls,fields)
def __repr__(self):
_repr_template = '{name}=%r'
repr_fmt = ','.join(_repr_template.format(name=name)
for name in self.fields)
return self.__class__.__name__ + '('+(repr_fmt)% self+')'
value = [1,2,3]
field = ['x','y','z']
nt = NamedTuple(value,field)
print(repr(nt))
print(nt.x)
print(nt[0])