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 字典(Dictionary)操作详解
Mar 11 Python
python通过socket查询whois的方法
Jul 18 Python
总结Python编程中函数的使用要点
Mar 20 Python
python 计算文件的md5值实例
Jan 13 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
python爬虫用mongodb的理由
Jul 28 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 Python
python解析照片拍摄时间进行图片整理
Jul 23 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
第八节 访问方式 [8]
2006/10/09 PHP
一个php作的文本留言本的例子(一)
2006/10/09 PHP
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
python实现批量监控网站
2016/09/09 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
Python读取stdin方法实例
2019/05/24 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
专营店会计助理岗位职责
2013/11/29 职场文书
班主任个人工作反思
2014/04/28 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Nginx四层负载均衡的配置指南
2021/06/11 Servers