Python 如何获取types.SimpleNamespace类型中的所有用户定义属性?
执行以下操作时:Python 如何获取types.SimpleNamespace类型中的所有用户定义属性?,python,python-3.x,Python,Python 3.x,执行以下操作时: import types ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3) print(dir(ns)) 结果列表还包含所有类方法,因此: ['__class__', '__delattr__', ..., 'alfa', 'bravo', 'charlie'] 如何只获取用户定义属性的列表,从而更好地不在属性名称上进行荒谬的文本匹配?更新: 事实上,我刚想起你可以做: >>> imp
import types
ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
print(dir(ns))
结果列表还包含所有类方法,因此:
['__class__', '__delattr__', ..., 'alfa', 'bravo', 'charlie']
如何只获取用户定义属性的列表,从而更好地不在属性名称上进行荒谬的文本匹配?更新: 事实上,我刚想起你可以做:
>>> import types
>>> ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
>>> list(ns.__dict__)
['charlie', 'bravo', 'alfa']
>>> sorted(ns.__dict__)
['alfa', 'bravo', 'charlie']
>>>
这要简单得多
只需使用过滤器过滤结果:
>>> import types
>>> ns = types.SimpleNamespace(alfa = 1, bravo = 2, charlie = 3)
>>> [x for x in dir(ns) if not x.startswith('__')]
['alfa', 'bravo', 'charlie']
>>>
谢天谢地,所有特殊的方法/属性都以\uuuu
开头和结尾,因此它们很容易过滤掉
如果您希望允许名称仅以\uuuu
开头,则可以使If
子句更加健壮:
[x for x in dir(ns) if not (x.startswith('__') and x.endswith('__'))]
谢谢,但是这样的文本搜索真的需要吗?SimpleNamespace似乎比dict更难使用,例如,dict具有获取定义值的键。