這篇文章主要給大家介紹了在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 套件中的功能來過濾:spec
包含:>>> [i for i in dir(list) if inspect.isbuiltin(getattr(list, i))] ['__new__', '__subclasshook__']
>>> [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']