python - bin() 可以像 Python 2.6 中的 oct() 和 hex() 那样重载吗?

标签 python binary overloading python-2.6

在 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”下。为了节省您一些时间,我将解释我正在使用的字符串:

  1. 参数零(即 19)应该被格式化,使用
  2. 一个神奇的“0”,表示我想要用 0 填充、右对齐的数字
  3. 10位精度,在
  4. 二进制格式。

您可以使用此语法实现对齐和填充的各种创意版本。

关于python - bin() 可以像 Python 2.6 中的 oct() 和 hex() 那样重载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002116/

相关文章:

c++ - 如何覆盖基类的 (->) 运算符的成员

c++ - Boost Overload 奇怪的行为.. `int (int ), int (std::string )` 与 `int (int ), int (std::string ), std::string (std::string)` 有何不同?

python - 如何有效地从多个列表中获取一组唯一值 (Python)

python - k 表示使用 numpy - 计算每次迭代的误差

python - Streamlit 按钮更改禁用状态

python - 选择 `distutils.setup(...)` 中的 Visual Studio 版本

java - 所有的都是二进制表示

c - 如何将小数打印成 32 位二进制,将其分隔 8 位

java - JPA 不明确的方法调用 isMember

python - 如何使用 Python 从二进制代码创建 PDF 文件?