简单的“符号”类型,用于枚举或sentinel
SymbolType的Python项目详细描述
安装symboltype(使用"easy_install SymbolType"或 "setup.py install")允许您访问peak.util.symbols 模块,以前仅通过安装完整的峰值工具包可用。 peak.util.symbols提供一个Symbol类型和两个内置符号 由peak:NOT_FOUND和NOT_GIVEN使用的。您可以创建 使用Symbol类型拥有符号对象,方法是为其指定符号名称 以及创建符号的模块的名称:
>>> from peak.util.symbols import Symbol >>> AN_EXAMPLE = Symbol('AN_EXAMPLE', __name__)
结果对象的repr()和str()形式与名称相同 你进来了:
>>> AN_EXAMPLE AN_EXAMPLE >>> str(AN_EXAMPLE) 'AN_EXAMPLE'
但符号只与自身相等;它们不等于字符串:
>>> AN_EXAMPLE == 'AN_EXAMPLE' False >>> AN_EXAMPLE == AN_EXAMPLE True
符号的__name__和__module__属性是原始名称和 用于创建符号的模块:
>>> from peak.util.symbols import NOT_FOUND >>> NOT_FOUND.__name__ 'NOT_FOUND' >>> NOT_FOUND.__module__ 'peak.util.symbols'
符号想要知道其定义模块的原因是 正确腌制和脱腌:
>>> import pickle >>> pickle.loads(pickle.dumps(NOT_FOUND)) NOT_FOUND
具体地说,拆开一个符号的结果就是 与原始符号相同的对象:
>>> pickle.loads(pickle.dumps(NOT_FOUND)) is NOT_FOUND True
注意,这意味着符号必须在其内部的模块级定义 模块,与传递给它的名称相同,否则pickle将 不粘的时候找不到。
最后但并非最不重要的是,符号对象是不可变的,不能在 任何方式:
>>> AN_EXAMPLE.foo = "bar" Traceback (most recent call last): ... TypeError: Symbols are immutable
邮件列表
请将有关此包裹的问题直接发送到高峰邮件列表;请参阅 http://www.eby-sarna.com/mailman/listinfo/PEAK/了解详细信息。