Python中如何获取类属性的列表
前言
最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类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包中的功能来过滤:
>>>[iforiindir(list)ifinspect.isbuiltin(getattr(list,i))] ['__new__','__subclasshook__']
inspect包中还包含:
>>>[iforiindir(inspect)ifinspect.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来使用:
>>>[iforiindir(inspect)ifnotcallable(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中得到类属性列表的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。