python 实现namedtuple(元类)
2018-03-07 17:51
302 查看
PS:非原创,网友的代码
代码:
说明:
最关键的是
通过拦截类的实例化过程,将参数list传入元祖,args再传入下面的
在
使用:
代码:
def namedtuple(tuple_name, attrs): class Meta(type): def __call__(self, *args): return type.__call__(self, args) attrs_set = set(attrs) def __init__(self, args): for key, value in zip(attrs, args): self.__dict__[key]=value def __str__(self): values = [str(x) for x in self.__dict__.values()] return tuple_name+'(' + ', '.join(values) + ')' def to_dict(self): return self.__dict__ return Meta(tuple_name, (tuple,),{'attr_keys':attrs_set,'__init__':__init__,'__str__':__str__,'to_dict':to_dict})
说明:
最关键的是
def __call__(self, *args): return type.__call__(self, args)
通过拦截类的实例化过程,将参数list传入元祖,args再传入下面的
__init__中,确保只有一个参数。
def __init__(self, args): for key, value in zip(attrs, args): self.__dict__[key]=value
在
__init__中,通过迭代将参数传入
self.__dict__字典中,之后即可用p.x的方式调用属性。
使用:
In [1]: from namedtuple_like import namedtuple In [2]: Point = namedtuple('p',['x','y']) In [3]: p = Point(1,2) In [4]: p.x Out[4]: 1 In [5]: p.y Out[5]: 2 In [8]: p.to_dict() Out[8]: {'x': 1, 'y': 2} In [12]: print(p) p(1, 2)
相关文章推荐
- 深刻理解Python中的元类(metaclass)以及元类实现单例模式
- 通过 python的 __call__ 函数与元类 实现单例模式
- python中7种实现单例模式的方法:staticmethod、classmethod、类属性方法、__new__、装饰器、元类、名字覆盖
- 使用Python的元类实现AOP监控类方法调用过程
- Python单例模式(元类实现)
- [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式
- 深刻理解Python中的元类(metaclass)以及元类实现单例模式
- 深刻理解Python中的元类(metaclass)以及元类实现单例模式
- Python 按行读取文本文件 缓存 和 非缓存实现
- 概率分布之间的距离度量以及python实现(四)
- Linux下使用crontab命令以及Python脚本实现自动签到
- 《OpenCV 3计算机视觉:Python语言实现》学习笔记——目标跟踪中基本运动检测的思考
- Python实现高效求解素数代码实例
- opencv-python 学习笔记2:实现目光跟随(又叫人脸跟随)
- Python利用heapq实现一个优先级队列
- leetcode 【Rotate List 】python 实现
- Python提取Linux内核源代码的目录结构实现方法
- paip.提升安全性----Des加密 java php python的实现总结
- 词性标注的python实现-基于平均感知机算法
- Python学习(三) 八大排序算法的实现(上)