Python中如何获取类属性的列表
作者:zrong''s blog 时间:2023-02-10 21:57:41
前言
最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 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__']
来源:http://zengrong.net/post/2584.htm
标签:python,类属性,列表
0
投稿
猜你喜欢
Python 中的lambda匿名函数和三元运算符
2023-04-21 05:22:18
Scrapy爬虫实例讲解_校花网
2023-03-02 14:46:39
Python二叉树初识(新手也秒懂!)
2022-10-09 13:03:36
浅谈javascript 函数表达式和函数声明的区别
2024-04-27 15:19:39
Jquery作者John Resig自己封装的javascript 常用函数
2023-09-11 13:14:16
Python3.7 dataclass使用指南小结
2023-10-02 13:36:14
mysql表名忽略大小写配置方法详解
2024-01-24 11:49:19
五个Pandas 实战案例带你分析操作数据
2021-04-02 18:46:05
python跳过第一行快速读取文件内容的实例
2022-05-12 12:58:56
python和php学习哪个更有发展
2023-05-06 17:40:20
vuex actions异步修改状态的实例详解
2024-05-10 14:12:50
在ASP中使用SQL语句之11:记录统计
2007-08-11 13:27:00
Python获取时间的操作示例详解
2023-05-21 07:54:56
使用vuex缓存数据并优化自己的vuex-cache
2024-04-30 10:46:33
php session 检测和注销
2023-11-17 22:45:02
浅谈django url请求与数据库连接池的共享问题
2024-01-26 00:12:40
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2024-01-29 02:05:25
vue2/vue3路由权限管理的方法实例
2024-05-29 22:28:54
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021-11-29 01:22:43
PyTorch搭建CNN实现风速预测
2022-09-11 17:40:19