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中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
python中查看变量内存地址的方法
May 05 Python
详解Python中expandtabs()方法的使用
May 18 Python
Python3搜索及替换文件中文本的方法
May 22 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
python编写Logistic逻辑回归
Dec 30 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
postman和python mock测试过程图解
Feb 22 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python连接mysql方法及常用参数
Sep 01 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 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计算上一个月的今天
2013/05/23 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
jquery tab标签页的制作
2010/05/10 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
基于jQuery实现表单提交验证
2014/11/24 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
python中使用print输出中文的方法
2018/07/16 Python
Python封装原理与实现方法详解
2018/08/28 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
super关键字的用法
2012/04/10 面试题
教育科研先进个人材料
2014/01/26 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
六年级作文之家庭作文
2019/12/12 职场文书