def patchproperty(*cls, **kwargs):
    """
    class getter 함수 패치 decorator
    EX)
    class B(A):
        pass

    @patchproperty(B)
    def prop(self):
        return 'hello'

    :param cls:
    :param kwargs:
    """

    def _patch(fun):
        m = kwargs.pop('property', None) or fun.__name__
        p = property(fun)
        for c in cls:
            setattr(c, m, p)

    def wrap(fun):
        _patch(fun)
        return fun

    return wrap
def patchproperty(*cls, **kwargs):
    """
    class getter 함수 패치 decorator
    EX)
    class B(A):
        pass

    @patchproperty(B)
    def prop(self):
        return 'hello'

    :param cls:
    :param kwargs:
    """

    def _patch(fun):
        m = kwargs.pop('property', None) or fun.__name__
        p = property(fun)
        for c in cls:
            setattr(c, m, p)

    def wrap(fun):
        _patch(fun)
        return fun

    return wrap
def patchproperty ( * cls , * * kwargs ) : def _patch ( fun ) : m = kwargs . pop ( 'property' , None ) or fun . __name__ p = property ( fun ) for c in cls : setattr ( c , m , p ) def wrap ( fun ) : _patch ( fun ) return fun return wrap
class getter 함수 패치 decorator
    EX)
    class B(A):
        pass

    @patchproperty(B)
    def prop(self):
        return 'hello'

    :param cls:
    :param kwargs:
class getter 함수 패치 decorator EX ) class B ( A ) : pass