Python中如何获取类属性的列表


Posted in Python onDecember 26, 2016

前言

最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 Type ,我要动态获取 Type.FTE 这个属性的值。

最简单的方案有两个:

getattr(Type, 'FTE')
Type.__dict__['FTE']

那么,如果要获取类属性的列表,该怎么做呢?

首先上场的是 dir ,它能返回当前范围的所有属性名称列表:

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

可以配合使用 inspect 包中的功能来过滤:

>>> [i for i in dir(list) if inspect.isbuiltin(getattr(list, i))]
['__new__', '__subclasshook__']

inspect 包中还包含:

>>> [i for i in dir(inspect) if inspect.isfunction(getattr(inspect, i))]
['_searchbases', 'classify_class_attrs', 'cleandoc', 'findsource', 'formatargspec', 'formatargvalues', 'getabsfile', 'getargs', 'getargspec', 'getargvalues', 'getblock', 'getcallargs', 'getclasstree', 'getcomments', 'getdoc', 'getfile', 'getframeinfo', 'getinnerframes', 'getlineno', 'getmembers', 'getmodule', 'getmoduleinfo', 'getmodulename', 'getmro', 'getouterframes', 'getsource', 'getsourcefile', 'getsourcelines', 'indentsize', 'isabstract', 'isbuiltin', 'isclass', 'iscode', 'isdatadescriptor', 'isframe', 'isfunction', 'isgenerator', 'isgeneratorfunction', 'isgetsetdescriptor', 'ismemberdescriptor', 'ismethod', 'ismethoddescriptor', 'ismodule', 'isroutine', 'istraceback', 'joinseq', 'namedtuple', 'stack', 'strseq', 'trace', 'walktree']

还可以配合 callable 来使用:

>>> [i for i in dir(inspect) if not callable(getattr(inspect, i))]
['CO_GENERATOR', 'CO_NESTED', 'CO_NEWLOCALS', 'CO_NOFREE', 'CO_OPTIMIZED', 'CO_VARARGS', 'CO_VARKEYWORDS', 'TPFLAGS_IS_ABSTRACT', '__author__', '__builtins__', '__date__', '__doc__', '__file__', '__name__', '__package__', '_filesbymodname', 'dis', 'imp', 'linecache', 'modulesbyfile', 'os', 're', 'string', 'sys', 'tokenize', 'types']

上面提到了 __dict__ ,也可以用它来获取属性列表:

>>> list.__dict__.keys()
['__getslice__', '__getattribute__', 'pop', 'remove', '__rmul__', '__lt__', '__sizeof__', '__init__', 'count', 'index', '__delslice__', '__new__', '__contains__', 'append', '__doc__', '__len__', '__mul__', 'sort', '__ne__', '__getitem__', 'insert', '__setitem__', '__add__', '__gt__', '__eq__', 'reverse', 'extend', '__delitem__', '__reversed__', '__imul__', '__setslice__', '__iter__', '__iadd__', '__le__', '__repr__', '__hash__', '__ge__']

总结

以上就是在Python中得到类属性列表的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
python实现将内容分行输出
Nov 05 Python
django加载本地html的方法
May 27 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
python SocketServer源码深入解读
Sep 17 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python实现人像动漫化的示例代码
May 17 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
深入理解python多线程编程
Apr 18 Python
详解Python为什么不用设计模式
Jun 24 Python
Python中强大的命令行库click入门教程
Dec 26 #Python
Python快速从注释生成文档的方法
Dec 26 #Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 #Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 #Python
详解python进行mp3格式判断
Dec 23 #Python
详解python发送各类邮件的主要方法
Dec 22 #Python
详解python 发送邮件实例代码
Dec 22 #Python
You might like
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
python快速排序代码实例
2013/11/21 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Python实现简单http服务器
2018/04/12 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python获取服务器响应cookie的实例
2018/12/28 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
银行介绍信范文
2014/01/10 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
机修工工作职责
2014/02/21 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书