<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_ilwdchar_class(tbl_name, col_name, namespace = globals()):
 	""" 	Searches this module's namespace for a subclass of _ilwd.ilwdchar 	whose table_name and column_name attributes match those provided. 	If a matching subclass is found it is returned; otherwise a new 	class is defined, added to this module's namespace, and returned. 	Example: 	"<class 'pycbc_glue.ligolw.ilwd.process_process_id_class'>" 	'process:process_id:10' 	Retrieving and storing the class provides a convenient mechanism 	for quickly constructing new ID objects. 	Example: 	process:process_id:0 	process:process_id:1 	process:process_id:2 	process:process_id:3 	process:process_id:4 	process:process_id:5 	process:process_id:6 	process:process_id:7 	process:process_id:8 	process:process_id:9 	"""

	#
	# if the class already exists, retrieve and return it
	#

	key = (str(tbl_name), str(col_name))
	cls_name = "%s_%s_class" % key
	assert cls_name != "get_ilwdchar_class"
	try:
		return namespace[cls_name]
	except KeyError:
		pass

	#
	# otherwise define a new class, and add it to the cache
	#

	class new_class(_ilwd.ilwdchar):
		__slots__ = ()
		table_name, column_name = key
		index_offset = len("%s:%s:" % key)

	new_class.__name__ = cls_name

	namespace[cls_name] = new_class

	#
	# pickle support
	#

	copy_reg.pickle(new_class, lambda x: (ilwdchar, (unicode(x),)))

	#
	# return the new class
	#

	return new_class