code: def get_child_fn(attrs, names, bases):
          def call_method(obj, method):
              if isinstance(obj, type):
                  instance = None
                  owner = obj
              else:
                  instance = obj
                  owner = obj.__class__
              method.__get__(instance, owner)()
          default_name = names[0]
          def default_fn(obj):
              for cls in bases:
                  if hasattr(cls, default_name):
                      call_method(obj, getattr(cls, default_name))
          default_fn.__name__ = default_name
          fns = [(name, attrs[name]) for name in names if name in attrs]
          if len(fns) > 1:
              raise RuntimeError("Cannot have more than one setup or teardown method per context (class or test).")
          elif len(fns) == 1:
              name, fn = fns[0]
              def child_fn(obj):
                  call_method(obj, fn)
              child_fn.__name__ = name
              return child_fn
          else:
              return default_fn