def METHOD_NAME(cls: T) -> T:
    for name, method in inspect.getmembers(cls, inspect.isfunction):
        # Ignore private functions, TODO: maybe make this a setting?
        if not name.startswith("_"):
            if isinstance(inspect.getattr_static(cls, name), staticmethod):
                setattr(
                    cls,
                    name,
                    staticmethod(
                        instrument(
                            method,
                            record_exception=record_exception,
                            attributes=attributes,
                            existing_tracer=existing_tracer,
                        )
                    ),
                )
            else:
                setattr(
                    cls,
                    name,
                    instrument(
                        method,
                        record_exception=record_exception,
                        attributes=attributes,
                        existing_tracer=existing_tracer,
                    ),
                )
    return cls