Bre*_*els 10 python int subclass built-in python-3.x
我有子类int
添加一个额外的属性:
class Integer(int):
def __new__(cls, value, base=10, indirect=False):
try:
obj = int.__new__(cls, value, base)
except TypeError:
obj = int.__new__(cls, value)
return obj
def __init__(self, value, base=10, indirect=False):
self.indirect = indirect
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中使用此类,int(Integer(b'0'))
有时返回值48(= ord('0')
!)或192,而不是正确的值0. str(Integer(b'0'))
总是返回'0'
.这似乎只发生在值0.首先解码b'0'
为字符串,或传递int(b'0')
给Integer
没有区别.问题在于将a转换Integer(0)
为int
with int()
.
此外,这是以随机方式发生的.后续运行将在应用程序(解析器)的不同点产生48或192.Python 3.2.2和3.2.3都表现相同(32位,Windows XP).
我似乎无法在一个简单的测试程序中重现这一点.以下产生无输出:
for i in range(100000):
integer = int(Integer(b'0'))
if integer > 0:
print(integer)
Run Code Online (Sandbox Code Playgroud)
检查int(Integer()) > 0
我的应用程序中的条件(当我知道参数Integer
是b'0'
)并有条件地打印int(Integer(b'0'))
多次时,结果48和192确实偶尔出现.
发生什么了?
编辑 - 由于我无法在短测试程序中重现该问题,因此我在此处提供了相关代码.它基本上是一个PDF解析器.此PDF文件的输出产生,例如:
b'0' 0 Integer(0) 192 0 b'0' 16853712
b'0' 0 Integer(0) 48 0 b'0' 16938088
b'0' 0 Integer(0) 192 0 b'0' 17421696
b'0' 0 Integer(0) 48 0 b'0' 23144888
b'0' 0 Integer(0) 48 0 b'0' 23185408
b'0' 0 Integer(0) 48 0 b'0' 23323272
Run Code Online (Sandbox Code Playgroud)
在代码中搜索打印函数调用以查看它代表什么.
归档时间: |
|
查看次数: |
338 次 |
最近记录: |