Подтвердить что ты не робот

Недетерминированное поведение подкласса int

У меня есть subclassed 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

Используя этот класс в моем приложении, 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 с 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)

Проверяя условие int(Integer()) > 0 в моем приложении (когда я знаю, что аргумент Integer равен b'0') и условно печатает int(Integer(b'0')) несколько раз, результаты 48 и 192 появляются сейчас, а затем.

Итак, что происходит?

EDIT. Поскольку я не могу воспроизвести проблему в короткой тестовой программе, я сделал доступный код здесь. Это в основном анализатор 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

Поиск вызовов функций печати в коде, чтобы увидеть, что это представляет.

4b9b3361