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开发之字符串string操作方法实例详解
Nov 12 Python
在centos7中分布式部署pyspider
May 03 Python
python记录程序运行时间的三种方法
Jul 14 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
Python测试模块doctest使用解析
Aug 10 Python
Python turtle绘画象棋棋盘
Aug 21 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
php中session定期自动清理的方法
2015/11/12 PHP
phalcon框架使用指南
2016/02/23 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
python装饰器代替set get方法实例
2019/12/19 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
泰国第一在线超市:Tops
2021/02/13 全球购物
大学生冰淇淋店商业计划书
2014/01/14 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
后进生评语大全
2015/01/04 职场文书
春节晚会开场白
2015/05/29 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android