做的时候:
import types
ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
print(dir(ns))
结果列表也包含所有类方法,因此:
['__class__', '__delattr__', ..., 'alfa', 'bravo', 'charlie']
如何获取只有用户定义属性的列表,因此['alfa', 'bravo', 'charlie']
,最好不要在属性名称上进行荒谬的文本匹配?
答案 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('__'))]