失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python的类里的属性是否可以为列表_Python中如何获取类属性的列表

python的类里的属性是否可以为列表_Python中如何获取类属性的列表

时间:2019-06-16 18:17:18

相关推荐

python的类里的属性是否可以为列表_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 包中的功能来过滤:

>>> [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中如何获取类属性的列表》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。