WARNING:
        properties are more safely injected using metaclasses

    References:
        http://stackoverflow.com/questions/13850114/dynamically-adding-methods-with-or-without-metaclass-in-python

def inject_func_as_property(self, func, method_name=None, class_=None):
    """
    WARNING:
        properties are more safely injected using metaclasses

    References:
        http://stackoverflow.com/questions/13850114/dynamically-adding-methods-with-or-without-metaclass-in-python
    """
    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)