code: def inject_func_as_property(self, func, method_name=None, class_=None):
      
      if method_name is None:
          method_name = get_funcname(func)
      #new_method = func.__get__(self, self.__class__)
      new_property = property(func)
      setattr(self.__class__, method_name, new_property)
docs: WARNING:
          properties are more safely injected using metaclasses
  
      References:
          http://stackoverflow.com/questions/13850114/dynamically-adding-methods-with-or-without-metaclass-in-python