LINUX.ORG.RU

Если волнует именно строковое представление (то есть repr(type(X())), то можно через метакласс:

class SimpleNamedType(type):
    def __repr__(self):
      return "<class '{}'>".format(self.__name__)


class X(metaclass=SimpleNamedType):
    pass


print(type(X()))
deadNightTiger ★★★★★
()
Ответ на: комментарий от deadNightTiger

А как isinstance тогда проверяет тип? Я думал это связано.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от hizel

Добавлял, но type и isinstance в него даже не заходят.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от vasilisk_lo

Google protobuf не знает о существовании Decimal и приходится вместе со встроенным типом таскать точность. Но проблема в том, что при наследовании встроенного типа перестает правильно работать isinstance на нём.

Ну или другой момент, можно ли заставить значения без вызова, ну т.е. 0 вместо int(0) использовать измененный тип?

А вообще похоже придется всю цепочку на Decimal переводить, потом конвертить перед protobuf. Слишком поздно вспомнили :(

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 2)

Короче нафиг, проще перетащить код на Decimal, а потом сделать конверт перед protobuf.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

напоминает забивания гвоздей микроскопом… Я не работал с protobuf, но неужели там нет возможность задать юзерскую сериализацию?..

А по поводу наследования вообще что-то странное:

>>> class my_int(int):
...     def __init__(self, *args):
...         super().__init__()
... 
>>> a = my_int(1)
>>> isinstance(a, int)
True

vasilisk_lo
()
Ответ на: комментарий от vasilisk_lo

Мне наоборот надо:

isinstance(1, my_int)

Забейте короче, тут built-in был переписан. И уже всё перетащил на Decimal, который экспоненту с собой таскает.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от steemandlinux

я-то забью, но при наследовании всё-таки так:

>>> a = my_int(1)
>>> isinstance(a, int)
True
>>> isinstance(a, my_int)
True

Поэтому-то мне и не понятно, в чём именно была проблема…

А, кажется понял тебя

vasilisk_lo
()
Последнее исправление: vasilisk_lo (всего исправлений: 1)
Ответ на: комментарий от vasilisk_lo

Да, ленивое решение

try:
    __builtins__["float"] = Float
except TypeError:
    __builtins__.float = Float
steemandlinux ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.