diff --git a/parameterized/parameterized.py b/parameterized/parameterized.py
index 96a662f..ba13861 100644
--- a/parameterized/parameterized.py
+++ b/parameterized/parameterized.py
@@ -44,7 +44,10 @@
     def make_method(func, instance, type):
         return MethodType(func, instance, type)
 
+
 CompatArgSpec = namedtuple("CompatArgSpec", "args varargs keywords defaults")
+
+
 def getargspec(func):
     if PY2:
         return CompatArgSpec(*inspect.getargspec(func))
@@ -58,11 +61,14 @@
         ) %(func, ))
     return CompatArgSpec(*args[:4])
 
+
 _param = namedtuple("param", "args kwargs")
 
+
 def skip_on_empty_helper(*a, **kw):
     raise SkipTest("parameterized input is empty")
 
+
 def reapply_patches_if_need(func):
 
     def dummy_wrapper(orgfunc):
@@ -79,6 +85,7 @@
             func = patch_obj.decorate_callable(func)
     return func
 
+
 def delete_patches_if_need(func):
     if hasattr(func, 'patchings'):
         func.patchings[:] = []
@@ -217,6 +224,7 @@
 
     return result
 
+
 def short_repr(x, n=64):
     """ A shortened repr of ``x`` which is guaranteed to be ``unicode``::
 
@@ -236,6 +244,7 @@
         x_repr = x_repr[:n//2] + "..." + x_repr[len(x_repr) - n//2:]
     return x_repr
 
+
 def default_doc_func(func, num, p):
     if func.__doc__ is None:
         return None
@@ -256,9 +265,11 @@
     args = "%s[with %s]" %(len(first) and " " or "", ", ".join(descs))
     return "".join([first.rstrip(), args, suffix, nl, rest])
 
+
 def default_name_func(func, num, p):
     base_name = func.__name__
     name_suffix = "_%s" %(num, )
+
     if len(p.args) > 0 and isinstance(p.args[0], string_types):
         name_suffix += "_" + parameterized.to_safe_name(p.args[0])
     return base_name + name_suffix
@@ -271,6 +282,7 @@
     "_pytest": "pytest",
 }
 
+
 def set_test_runner(name):
     global _test_runner_override
     if name not in _test_runners:
@@ -280,6 +292,7 @@
         )
     _test_runner_override = name
 
+
 def detect_runner():
     """ Guess which test runner we're using by traversing the stack and looking
         for the first matching module. This *should* be reasonably safe, as
@@ -536,7 +549,7 @@
         return str(re.sub("[^a-zA-Z0-9_]+", "_", s))
 
 
-def parameterized_class(attrs, input_values=None):
+def parameterized_class(attrs, input_values=None, classname_func=None):
     """ Parameterizes a test class by setting attributes on the class.
 
         Can be used in two ways:
@@ -569,26 +582,35 @@
         [dict(zip(attrs, vals)) for vals in input_values]
     )
 
+    classname_func = classname_func or default_classname_func
+
     def decorator(base_class):
         test_class_module = sys.modules[base_class.__module__].__dict__
         for idx, input_dict in enumerate(input_dicts):
             test_class_dict = dict(base_class.__dict__)
             test_class_dict.update(input_dict)
 
-            name_suffix = input_values and input_values[idx]
-            if isinstance(name_suffix, (list, tuple)) and len(input_values) > 0:
-                name_suffix = name_suffix[0]
-            name_suffix = (
-                "_%s" %(name_suffix, ) if isinstance(name_suffix, string_types) else
-                ""
-            )
-
-            name = "%s_%s%s" %(
-                base_class.__name__,
-                idx,
-                name_suffix,
-            )
+            name = classname_func(base_class, idx, input_dicts)
 
             test_class_module[name] = type(name, (base_class, ), test_class_dict)
 
     return decorator
+
+
+def default_classname_func(cls, num, p):
+
+    name_suffix = p and p[num]
+    if isinstance(name_suffix, (list, tuple)) and len(p) > 0:
+        name_suffix = name_suffix[0]
+    name_suffix = (
+        "_%s" %(name_suffix, ) if isinstance(name_suffix, string_types) else
+        ""
+    )
+
+    name = "%s_%s%s" %(
+        cls.__name__,
+        num,
+        name_suffix,
+    )
+
+    return name
\ No newline at end of file
