gpt4 book ai didi

python - 如何在 Python 脚本中创建单独的命名空间?

转载 作者:行者123 更新时间:2023-12-01 07:56:24 27 4
gpt4 key购买 nike

我想在 Python 命名空间下存储一堆变量而不创建单独的模块。我注意到 ArgumentParser 的结果的parse_args()argparse.Namespace目的。您可以通过点语法访问参数。

from argparse import ArgumentParser

parser = ArgumentParser()
# some arg definitions here...
args = parser.parse_args() # returns a `argparse.Namespace` object

如何创建 argparse.Namespace 的等效项?我知道我可以用 dict 做类似的事情但我想使用点语法。是否有任何内置类可以让您分配任意属性?

最佳答案

从 python3.3 开始你可以使用 types.SimpleNamespace .

然而,另一种选择很简单:

class Namespace(object):
pass

namespaceA = Namespace()
namespaceA.x = 1
SimpleNamespace 的完整代码不会再长了。

请注意,您不能简单地使用 object实例:
>>> o = object()
>>> o.x = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'x'

这是因为 object 的实例没有 __dict__属性:
>>> vars(object())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute

这意味着您不能设置 object 实例的属性。 .

任意 object没有 __slots__ 的子类属性集确实有 __dict__它用于(默认情况下)存储/检索属性:
>>> class Namespace(object):
... pass
...
>>> a = Namespace()
>>> a.x = 1 # same as as.__dict__['a'] = 1
>>> a.__dict__
{'x': 1}

有关属性设置/查找的更多信息,您应该了解 descriptors .

关于python - 如何在 Python 脚本中创建单独的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25896322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com