python - 创建简单的一次性 Python 对象的简单方法是什么?

标签 python

我想创建一个简单的一次性 Python 对象来保存一些命令行选项。我想做这样的事情:

options = ??????
options.VERBOSE = True
options.IGNORE_WARNINGS = False

# Then, elsewhere in the code...
if options.VERBOSE:
    ...

当然我可以使用字典,但是 options.VERBOSEoptions['VERBOSE'] 更具可读性和更易于键入。

认为我应该能够做到

options = object()

,因为 object 是所有类对象的基类型,因此应该类似于没有属性的类。但它不起作用,因为使用 object() 创建的对象没有 __dict__ 成员,因此无法向其添加属性:

options.VERBOSE = True
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'VERBOSE'

创建可以这种方式使用的对象的最简单的“pythonic”方法是什么,最好不需要创建额外的帮助程序类?

最佳答案

collections module在 2.6 中增加了一个 namedtuple 函数:

import collections
opt=collections.namedtuple('options','VERBOSE IGNORE_WARNINGS')
myoptions=opt(True, False)

>>> myoptions
options(VERBOSE=True, IGNORE_WARNINGS=False)
>>> myoptions.VERBOSE
True

namedtuple 是不可变的,因此您只能在创建它时分配字段值。

在早期的 Python 版本中,您可以创建一个空类:

class options(object):
    pass

myoptions=options()
myoptions.VERBOSE=True
myoptions.IGNORE_WARNINGS=False
>>> myoptions.IGNORE_WARNINGS,myoptions.VERBOSE
(False, True)

关于python - 创建简单的一次性 Python 对象的简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/211695/

相关文章:

python - 如何制作其他软件包不再需要的 pip 卸载软件包?

python - 使用不同的行终止符在 Python 中读取 csv 文件

python - tar.extractall() 无法识别意外的 EOF

python - 在matplotlib中截断y轴

python - 预先分类的经过训练的 Twitter 评论以进行分类

python - 从一个数据帧到另一个数据帧的查找值?

python - 删除 Python 中用点分隔的字符串的最后一部分

python - 如何确保用户输入了数字?

javascript - 如何使用 python json 将模板渲染为 TreeView ?

python - @properties 装饰器是否缓存结果?