Как я получаю список всех типов Python (программно)?

Обсуждение в недавнем вопросе, этом min/max() нужно, возражает, чтобы быть сопоставимым, заставил меня задаться вопросом, как я нахожу, какие типы Python поддерживают конкретный метод (__cmp__, или возможно __lt__ - специфические особенности, не важные).

Основной к этому, кажется, способность получить список всех типов, запуститься с. Затем я могу просто проверить hasattr(thisType, '__cmp__'). Таким образом, как я перечисляю все типы данных существует?

5
задан Community 23 May 2017 в 10:29
поделиться

2 ответа

>>> import __builtin__
>>> builtin_types= [t
...  for t in __builtin__.__dict__.itervalues()
...  if isinstance(t, type)]

>>> import pprint
>>> pprint.pprint(sorted(builtin_types, key=repr))
[<type 'basestring'>,
 <type 'bool'>,
 <type 'buffer'>,
 <type 'bytearray'>,
 <type 'classmethod'>,
 <type 'complex'>,
 <type 'dict'>,
 <type 'enumerate'>,
 <type 'exceptions.ArithmeticError'>,
 <type 'exceptions.AssertionError'>,
 <type 'exceptions.AttributeError'>,
 <type 'exceptions.BaseException'>,
 <type 'exceptions.BufferError'>,
 <type 'exceptions.BytesWarning'>,
 <type 'exceptions.DeprecationWarning'>,
 <type 'exceptions.EOFError'>,
 <type 'exceptions.EnvironmentError'>,
 <type 'exceptions.Exception'>,
 <type 'exceptions.FloatingPointError'>,
 <type 'exceptions.FutureWarning'>,
 <type 'exceptions.GeneratorExit'>,
 <type 'exceptions.IOError'>,
 <type 'exceptions.ImportError'>,
 <type 'exceptions.ImportWarning'>,
 <type 'exceptions.IndentationError'>,
 <type 'exceptions.IndexError'>,
 <type 'exceptions.KeyError'>,
 <type 'exceptions.KeyboardInterrupt'>,
 <type 'exceptions.LookupError'>,
 <type 'exceptions.MemoryError'>,
 <type 'exceptions.NameError'>,
 <type 'exceptions.NotImplementedError'>,
 <type 'exceptions.OSError'>,
 <type 'exceptions.OverflowError'>,
 <type 'exceptions.PendingDeprecationWarning'>,
 <type 'exceptions.ReferenceError'>,
 <type 'exceptions.RuntimeError'>,
 <type 'exceptions.RuntimeWarning'>,
 <type 'exceptions.StandardError'>,
 <type 'exceptions.StopIteration'>,
 <type 'exceptions.SyntaxError'>,
 <type 'exceptions.SyntaxWarning'>,
 <type 'exceptions.SystemError'>,
 <type 'exceptions.SystemExit'>,
 <type 'exceptions.TabError'>,
 <type 'exceptions.TypeError'>,
 <type 'exceptions.UnboundLocalError'>,
 <type 'exceptions.UnicodeDecodeError'>,
 <type 'exceptions.UnicodeEncodeError'>,
 <type 'exceptions.UnicodeError'>,
 <type 'exceptions.UnicodeTranslateError'>,
 <type 'exceptions.UnicodeWarning'>,
 <type 'exceptions.UserWarning'>,
 <type 'exceptions.ValueError'>,
 <type 'exceptions.Warning'>,
 <type 'exceptions.ZeroDivisionError'>,
 <type 'file'>,
 <type 'float'>,
 <type 'frozenset'>,
 <type 'int'>,
 <type 'list'>,
 <type 'long'>,
 <type 'object'>,
 <type 'property'>,
 <type 'reversed'>,
 <type 'set'>,
 <type 'slice'>,
 <type 'staticmethod'>,
 <type 'str'>,
 <type 'str'>,
 <type 'super'>,
 <type 'tuple'>,
 <type 'type'>,
 <type 'unicode'>,
 <type 'xrange'>]
7
ответ дан 14 December 2019 в 04:29
поделиться

Наличие реляционных специальных методов недостаточно для гарантии сопоставимости; методы по-прежнему могут вызывать исключение, если им не нравятся переданные им конкретные типы.

1
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: