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脚本实现xls(xlsx)转成csv
Apr 10 Python
利用python如何处理nc数据详解
May 23 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
python3爬取torrent种子链接实例
Jan 16 Python
tensorflow 变长序列存储实例
Jan 20 Python
如何基于python对接钉钉并获取access_token
Apr 21 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
Python Selenium异常处理的实例分析
Feb 28 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
我的论坛源代码(十)
2006/10/09 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
php中动态变量用法实例
2015/06/10 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
python中偏函数partial用法实例分析
2015/07/08 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
总裁办公室主任职责
2014/01/02 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
优秀毕业生事迹材料
2014/02/12 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
课程设计感想范文
2015/08/11 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
AngularJS实现多级下拉框
2022/03/25 Javascript
Android Studio 计算器开发
2022/05/20 Java/Android