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条件变量之生产者与消费者操作实例分析
Mar 22 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python查找第n个子串的技巧分享
Jun 27 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
python 判断一组数据是否符合正态分布
Sep 23 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
基于tensorflow权重文件的解读
May 26 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 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/12/06 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Python zip()函数用法实例分析
2018/03/17 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
python验证身份证信息实例代码
2019/05/06 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
2014年团工作总结
2014/11/27 职场文书
慰问信模板
2015/02/14 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
离婚起诉书范本
2015/05/18 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python