Поддержание типа ребенка - PullRequest
0 голосов
/ 07 марта 2020

У меня есть класс, который я расширяю с помощью int, чтобы получить удобную встроенную математику int ( например. +, -, >>, et c. )

class C(int):
    def __init__(self, byte):
        self.byte=byte;

    def __str__(self):
        return str(self.byte);

    def bin(self):
        return bin(self.byte)[2:].zfill(8);

    def set(self, x):
        self.byte |= 1<<(x-1)

    #---snip---

Это прекрасно работает, пока я не использую метод из int, потому что int возвращает int.

>>> a=C(0x87)
>>> a
135
>>> a.bin()
'10000111'
>>> a.set(7)
>>> a.bin()
'11000111'
>>> type(a)
<class '__main__.C'>
>>> a+=3
>>> type(a)
<class 'int'>
>>> a.set(6) #AttributeError

Я понимаю, что могу переопределить любой из int методы путем жесткого кодирования нового определения для каждого, но я хочу избежать этого, если это возможно. Математика - это уже все, я просто хочу изменить поведение в C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...