code: def aliased(aliased_class):
      
      original_methods = aliased_class.__dict__.copy()
      original_methods_set = set(original_methods)
      for name, method in original_methods.items():
          aliases = None
          if isinstance(method, property) and hasattr(method.fget, '_aliases'):
              aliases = method.fget._aliases
          elif hasattr(method, '_aliases'):
              aliases = method._aliases
  
          if aliases:
              # Add the aliases for 'method', but don't override any
              # previously-defined attribute of 'aliased_class'
              for alias in aliases - original_methods_set:
                  setattr(aliased_class, alias, method)
      return aliased_class
docs: Decorator function that *must* be used in combination with @alias
      decorator. This class will make the magic happen!
      @aliased classes will have their aliased method (via @alias) actually
      aliased.
      This method simply iterates over the member attributes of 'aliased_class'
      seeking for those which have an '_aliases' attribute and then defines new
      members in the class using those aliases as mere pointer functions to the
      original ones.
  
      Usage:
  
      >>> @aliased
      ... class MyClass(object):
      ...     @alias('coolMethod', 'myKinkyMethod')
      ...     def boring_method(self):
      ...        pass
      ...
      ...     @property
      ...     @alias('my_prop_alias')
      ...     def my_prop(self):
      ...        return "hi"
  
      >>> i = MyClass()
      >>> i.coolMethod() # equivalent to i.myKinkyMethod() and i.boring_method()
      >>> i.my_prop == i.my_prop_alias
      True