如何在types.SimpleNamespace类型中获取所有用户定义的属性?

时间:2014-12-17 18:11:27

标签: python python-3.x

做的时候:

import types
ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
print(dir(ns))

结果列表也包含所有类方法,因此:

['__class__', '__delattr__', ..., 'alfa', 'bravo', 'charlie']

如何获取只有用户定义属性的列表,因此['alfa', 'bravo', 'charlie'],最好不要在属性名称上进行荒谬的文本匹配?

1 个答案:

答案 0 :(得分:4)

<强>更新

实际上,我记得你能做到:

>>> import types
>>> ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
>>> list(ns.__dict__)
['charlie', 'bravo', 'alfa']
>>> sorted(ns.__dict__)
['alfa', 'bravo', 'charlie']
>>>

这简单得多。


只需使用list comprehension过滤结果:

>>> import types
>>> ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
>>> [x for x in dir(ns) if not x.startswith('__')]
['alfa', 'bravo', 'charlie']
>>>

值得庆幸的是,所有特殊方法/属性都以__开头和结尾,因此很容易过滤掉。

如果您想允许名称仅以__开头,那么您可以使if子句更加健壮:

[x for x in dir(ns) if not (x.startswith('__') and x.endswith('__'))]