Python, похоже, не имеет базового класса для «всех чисел», например. грамм. int, float, complex, long (в Python2). Это неприятно и немного неудобно для меня.
Я пишу функцию для сопоставления типов данных друг с другом (алгоритм сопоставления/поиска дерева). Для этого я хотел бы проверить входные значения на наличие lists, dicts, strings или «чисел». Каждый из четырех случаев обрабатывается отдельно, но я не хочу различать int, long, float или complex (хотя последний, вероятно, не появится). Этого было бы довольно легко достичь, если бы все числовые типы производились от базового типа number, но, к сожалению, это не так, AFAICS.
Это обеспечение четкости делает очевидным, что необычный complex включен. Что обычно вызывает вопросы, о которых я не хочу думать. Мой дизайн скорее говорит «все типы чисел», чем этот явный список. Я также не хочу явно перечислять все возможные типы чисел из других библиотек, таких как numpy или подобных.
Первый вопрос, скорее теоретический: почему разработчики не сделали так, чтобы все типы чисел наследовали общий базовый класс чисел? Есть ли для этого веская причина, может быть, теория об этом, которая позволяет казаться нерекомендуемой? Или имеет смысл предложить эту идею для более поздних версий Python?
Второй вопрос, более практичный: существует ли рекомендуемый способ проверки значения на то, является ли оно числом, может быть, библиотечный вызов, о котором я не знаю? Прямая версия использования isinstance(x, (int, float, complex, long)) выглядит для меня как сцепление, несовместима с Python3, который больше не знает тип long, и не включает библиотечные числовые типы, такие как numpy.int32.
numpyимеет такую цепочку наследования дляint32:object→generic→number→integer→signedinteger→int32. Это может быть немного излишним, но показывает, что это, вероятно, неплохая идея в целом. - person Alfe   schedule 26.06.2017isinstanceдля каждого типа номера. Вы даже можете поместить типы в кортеж/список/что угодно и перебирать их, проверяя каждый. Он является подробным, но только внутри метода, и вы будете уверены, что ваш номер относится к одному из определенных вами типов. - person Meloman   schedule 26.06.2017