42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
"""
|
|
Define names for built-in types that aren't directly accessible as a builtin.
|
|
"""
|
|
import sys
|
|
|
|
# Iterators in Python aren't a matter of type but of protocol. A large
|
|
# and changing number of builtin types implement *some* flavor of
|
|
# iterator. Don't check the type! Use hasattr to check for both
|
|
# "__iter__" and "__next__" attributes instead.
|
|
|
|
def _f(): pass
|
|
FunctionType = type(_f)
|
|
LambdaType = type(lambda: None) # Same as FunctionType
|
|
CodeType = type(_f.__code__)
|
|
|
|
def _g():
|
|
yield 1
|
|
GeneratorType = type(_g())
|
|
|
|
class _C:
|
|
def _m(self): pass
|
|
MethodType = type(_C()._m)
|
|
|
|
BuiltinFunctionType = type(len)
|
|
BuiltinMethodType = type([].append) # Same as BuiltinFunctionType
|
|
|
|
ModuleType = type(sys)
|
|
|
|
try:
|
|
raise TypeError
|
|
except TypeError:
|
|
tb = sys.exc_info()[2]
|
|
TracebackType = type(tb)
|
|
FrameType = type(tb.tb_frame)
|
|
tb = None; del tb
|
|
|
|
# For Jython, the following two types are identical
|
|
GetSetDescriptorType = type(FunctionType.__code__)
|
|
MemberDescriptorType = type(FunctionType.__globals__)
|
|
|
|
del sys, _f, _g, _C, # Not for export
|