blob: 65b70f7803dfc1d4bca65600fbdb8050542c82a4 [file] [log] [blame]
Georg Brandle5a32dc2007-12-21 08:16:54 +00001"""
2Define names for built-in types that aren't directly accessible as a builtin.
Guido van Rossume7b146f2000-02-04 15:28:42 +00003"""
Guido van Rossum85d89451994-06-23 11:53:27 +00004import sys
5
Tim Peters26991a72001-09-25 22:02:03 +00006# Iterators in Python aren't a matter of type but of protocol. A large
7# and changing number of builtin types implement *some* flavor of
8# iterator. Don't check the type! Use hasattr to check for both
Georg Brandla18af4e2007-04-21 15:47:16 +00009# "__iter__" and "__next__" attributes instead.
Tim Peters26991a72001-09-25 22:02:03 +000010
Guido van Rossumadc940e1994-09-29 10:04:43 +000011def _f(): pass
12FunctionType = type(_f)
Guido van Rossum45e2fbc1998-03-26 21:13:24 +000013LambdaType = type(lambda: None) # Same as FunctionType
Guido van Rossuma8add0e2007-05-14 22:03:55 +000014CodeType = type(_f.__code__)
Guido van Rossum85d89451994-06-23 11:53:27 +000015
Tim Peters264c6592004-07-18 00:08:11 +000016def _g():
Tim Peters3e7b1a02001-06-25 19:46:25 +000017 yield 1
Tim Peters264c6592004-07-18 00:08:11 +000018GeneratorType = type(_g())
Tim Peters3e7b1a02001-06-25 19:46:25 +000019
Guido van Rossumadc940e1994-09-29 10:04:43 +000020class _C:
Guido van Rossum898c9151997-09-04 22:12:34 +000021 def _m(self): pass
Guido van Rossum65810fe2006-05-26 19:12:38 +000022MethodType = type(_C()._m)
Guido van Rossum85d89451994-06-23 11:53:27 +000023
Guido van Rossumadc940e1994-09-29 10:04:43 +000024BuiltinFunctionType = type(len)
Guido van Rossum45e2fbc1998-03-26 21:13:24 +000025BuiltinMethodType = type([].append) # Same as BuiltinFunctionType
Guido van Rossum85d89451994-06-23 11:53:27 +000026
27ModuleType = type(sys)
Guido van Rossum85d89451994-06-23 11:53:27 +000028
29try:
Guido van Rossum898c9151997-09-04 22:12:34 +000030 raise TypeError
Guido van Rossum85d89451994-06-23 11:53:27 +000031except TypeError:
Guido van Rossuma8add0e2007-05-14 22:03:55 +000032 tb = sys.exc_info()[2]
33 TracebackType = type(tb)
34 FrameType = type(tb.tb_frame)
Guido van Rossumf15d1591997-09-29 23:22:12 +000035 tb = None; del tb
Guido van Rossum85d89451994-06-23 11:53:27 +000036
Thomas Wouters0e3f5912006-08-11 14:57:12 +000037# Extension types defined in a C helper module. XXX There may be no
38# equivalent in implementations other than CPython, so it seems better to
39# leave them undefined then to set them to e.g. None.
40try:
41 import _types
42except ImportError:
43 pass
44else:
45 GetSetDescriptorType = type(_types.Helper.getter)
46 MemberDescriptorType = type(_types.Helper.member)
47 del _types
48
49del sys, _f, _g, _C, # Not for export