您可以创建一个简单的类:
class Namespace: def __init__(self, **kwargs): self.__dict__.update(kwargs)
argparse
Namespace在属性方面,它的工作方式与类完全相同:
>>> args = Namespace(a=1, b='c')>>> args.a1>>> args.b'c'
或者,只需 导入类 ;可从
argparse模块中获得:
from argparse import Namespaceargs = Namespace(a=1, b='c')
从Python
3.3开始,还有
types.SimpleNamespace,它实际上做同样的事情:
>>> from types import SimpleNamespace>>> args = SimpleNamespace(a=1, b='c')>>> args.a1>>> args.b'c'
这两种类型是不同的。
SimpleNamespace主要用于
sys.implementation属性和的返回值
time.get_clock_info()。
进一步比较:
- 这两个类都支持相等性测试。对于相同类的两个实例,
instance_a == instance_b
如果它们具有相同的属性且具有相同的值,则为true。 - 这两个类都有助于
__repr__
显示它们具有哪些属性。 Namespace()
对象支持遏制测试;'attrname' in instance
如果名称空间实例具有属性namend,则为trueattrname
。SimpleNamespace
才不是。Namespace()
对象具有未公开的._get_kwargs()
方法,该方法返回(name, value)
该实例的属性的排序列表。您可以使用任一类获得相同的结果sorted(vars(instance).items())
。- 虽然
SimpleNamespace()
用CNamespace()
实现并用Python实现,但是属性访问并没有更快,因为它们都使用相同__dict__
的属性存储。对于SimpleNamespace()
实例,相等性测试和生成表示形式要快一些。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)