Sco*_*ths 14 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'
Run Code Online (Sandbox Code Playgroud)
我怀疑没有办法实现这一目标,但我认为这不会有问题!
Gly*_*yph 12
正如您已经发现的那样,您无法覆盖bin(),但听起来并不像您需要这样做.你只想要一个0填充的二进制值.不幸的是在python 2.5和之前的版本中,您无法使用"%b"来表示二进制文件,因此您无法使用"%"字符串格式化运算符来实现所需的结果.
幸运的是,python 2.6以新的str.format()方法的形式提供了你想要的东西.我相信你正在寻找的这一点线噪声:
>>> '{0:010b}'.format(19)
'0000010011'
Run Code Online (Sandbox Code Playgroud)
这种迷你语言的语法在文档中的" 格式规范迷你语言 "下.为了节省你一些时间,我将解释我正在使用的字符串:
19)应格式化,使用0"表示我想要0-padded,右对齐数字,用您可以使用此语法来实现对齐和填充的各种创意版本.
我认为简短的回答是"不,bin()不能像oct()和那样超负荷" hex().
至于为什么,答案必须在于Python 3.0,它用于__index__重载hex(),oct()并且完全bin()删除了__oct__和__hex__特殊功能.
所以Python 2.6 bin()看起来非常像它真的是一个Python 3.0功能,它已经被反向移植而没有太多考虑它正在以新的Python 3方式而不是旧的Python 2方式.我也猜测它不太可能得到修复,即使它被认为是一个bug.
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |