# pylint: disable=protected-access
[docs]def extension_method(base, name=None, decorator=None, instancemethod=False, alias=None):
def inner(func):
func_names = [name or func.__name__]
if alias:
aliases = alias if isinstance(alias, list) else [alias]
func_names += aliases
func = decorator(func) if decorator else func
for func_name in func_names:
if instancemethod:
if hasattr(base, "_methods"):
base._methods.append((func_name, func))
else:
base._methods = [(func_name, func)]
else:
setattr(base, func_name, func)
return func
return inner
[docs]def extension_classmethod(base, name=None, alias=None):
return extension_method(base=base, name=name, decorator=classmethod, alias=alias)