Вы можете напрямую манипулировать X.__doc__
, например:
if aliases:
for a in aliases - aliased_class_set:
method.__doc__ = "This function is an alias of %s." % a
setattr(aliased_class, a, method)
Но проблема в том, что исходная ссылка X
также будет подвержена влиянию. Поэтому вам лучше использовать оболочку:
def aliased(aliased_class):
"""
A decorator for enabling method aliases.
"""
def wrapper(func):
@functools.wraps(func)
def inner(*args, **kwargs):
return func(*args, **kwargs)
return inner
aliased_class_dict = aliased_class.__dict__.copy()
aliased_class_set = set(aliased_class_dict)
for name, method in aliased_class_dict.items():
aliases = None
if (type(method) == property) and hasattr(method.fget, '_aliases'):
aliases = method.fget._aliases
elif hasattr(method, '_aliases'):
aliases = method._aliases
if aliases:
for a in aliases - aliased_class_set:
wrapped_method = wrapper(method)
wrapped_method.__doc__ = "This function is an alias of %s." % a
setattr(aliased_class, a, wrapped_method)
return aliased_class
И тест:
print(mc.alpha_greater_than.__doc__)
print(mc.agt.__doc__)
Выход:
Checks whether alpha is greater than the given value.
This function is an alias of agt.