argparse.Namespace和types.SimpleNamespace之间有什么区别?

3

看起来它们的行为完全相同 - 都像 dicts 一样,但是使用点号字面量来访问项,但是它们中没有一个是另一个的子类。

from argparse import Namespace
from types import SimpleNamespace

issubclass(Namespace, SimpleNamespace)  # False
issubclass(SimpleNamespace, Namespace)  # False

那么,它们两个之间有区别吗? 在所有情况下都可以使用argparse.Namespace吗?


没有理由认为它们是相关的类。它们具有相同的明显语法,但用途不同。argparse 是特定目的的。types 就像可能性一样普遍。从阅读文档中可以发现,argparse 的编写是为了解决其前身 optparse 中被开发人员认为存在的设计缺陷,该缺陷也有一个 Namespace 类,并且我认为 optparse 先于 types.SimpleNamespace - BoarGules
“argparse.Namespace” 可以在所有情况下使用吗?坦率地说,我认为这是错误的问题。你可能想要拥有两个不同的类型,实际上具有相同的功能,原因与你想要使用不同的 enum 而不仅仅是神奇的 int 相同。 - juanpa.arrivillaga
1个回答

4

曾经有一个提议,让 argparse 继承。不过,如果你使用的是足够新的 Python 版本,只需使用 types 就可以了;这就是它存在的原因。


1
当前问题链接为:https://github.com/python/cpython/issues/83257 - pabouk - Ukraine stay strong
2
因此,简短的回答是:它们是同一事物的两个独立实现,存在一些微小的技术差异,但这并不足以证明它们需要合并,因此维护者也没有费心将它们合并。 - Maëlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接