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 自动化将markdown文件转成html文件的方法
Sep 23 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
Python实现针对中文排序的方法
May 09 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
python中reload(module)的用法示例详解
Sep 15 Python
Python列表list排列组合操作示例
Dec 18 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python写一个随机点名软件的实例
Nov 28 Python
np.random.seed() 的使用详解
Jan 14 Python
Python如何操作docker redis过程解析
Aug 10 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中如何判断AJAX提交的数据
2012/02/05 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
YII框架常用技巧总结
2019/04/27 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
python实现图像识别功能
2018/01/29 Python
Python二维码生成识别实例详解
2019/07/16 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
研究生自我鉴定范文
2013/10/30 职场文书
电气专业推荐信范文
2013/11/18 职场文书
锦旗标语大全
2014/06/23 职场文书
欢迎领导标语
2014/06/27 职场文书
病假证明模板
2015/06/19 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
golang为什么要统一错误处理
2022/04/03 Golang