做的时候:
import types
ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
print(dir(ns))
结果列表也包含所有类方法,因此:
['__class__', '__delattr__', ..., 'alfa', 'bravo', 'charlie']
如何获得仅包含用户定义属性的列表,因此 ['alfa', 'bravo', 'charlie']
最好不要对属性名称进行可笑的文本匹配?
gia hạn:
其实,我只是想起来你可以这样做:
>>> 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']
>>>
值得庆幸的是,所有特殊方法/属性都以 __
开头和结尾,因此很容易过滤掉它们。
如果你想允许只以 __
开头的名称,那么你可以使 nếu như
子句更健壮一些:
[x for x in dir(ns) if not (x.startswith('__') and x.endswith('__'))]
Tôi là một lập trình viên xuất sắc, rất giỏi!