在 Python 2.6(及更早版本)中 hex()
和 oct()
通过定义 __hex__
可以在类中重载内置函数和 __oct__
特殊功能。但是没有 __bin__
用于重载 Python 2.6 新 bin()
行为的特殊函数内置函数。
我想知道有没有办法灵活重载bin()
,如果不是,我想知道为什么界面不一致?
我知道 __index__
可以使用特殊函数,但这不灵活,因为它只能返回一个整数。我的特定用例来自 bitstring模块,其中前导零位被认为是重要的:
>>> a = BitString(length=12) # Twelve zero bits
>>> hex(a)
'0x000'
>>> oct(a)
'0o0000'
>>> bin(a)
'0b0' <------ I want it to output '0b000000000000'
我怀疑没有办法实现这一点,但我认为问问也无妨!
最佳答案
正如您已经发现的那样,您无法覆盖 bin()
,但听起来您不需要这样做。您只需要一个 0 填充的二进制值。不幸的是,在 python 2.5 和之前的版本中,您不能使用“%b”来表示二进制,因此您不能使用“%”字符串格式化运算符来实现您想要的结果。
幸运的是,python 2.6 以新的 str.format() 的形式提供了您想要的东西。方法。我相信这种特殊的线路噪声正是您要寻找的:
>>> '{0:010b}'.format(19)
'0000010011'
这种迷你语言的语法在文档中的“format specification mini-language”下。为了节省您一些时间,我将解释我正在使用的字符串:
- 参数零(即
19
)应该被格式化,使用 - 一个神奇的“
0
”,表示我想要用 0 填充、右对齐的数字 - 10位精度,在
- 二进制格式。
您可以使用此语法实现对齐和填充的各种创意版本。
关于python - bin() 可以像 Python 2.6 中的 oct() 和 hex() 那样重载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002116/