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如何使用unittest测试接口
Apr 04 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
python读取各种文件数据方法解析
Dec 29 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
Python数据库小程序源代码
Sep 15 Python
Python内置加密模块用法解析
Nov 25 Python
python代码xml转txt实例
Mar 10 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
如何写python的配置文件
Jun 07 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
pymongo insert_many 批量插入的实例
Dec 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 mysql索引问题
2008/06/07 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
PHP程序漏洞产生的原因分析与防范方法说明
2014/03/06 PHP
PHP 读取和编写 XML
2014/11/19 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
经典演讲稿范文
2013/12/30 职场文书
乔迁宴答谢词
2014/01/21 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
党支部书记岗位职责
2015/02/15 职场文书
卖车协议书范文
2016/03/23 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript