Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取types.SimpleNamespace类型中的所有用户定义属性?_Python_Python 3.x - Fatal编程技术网

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具有获取定义值的键。