class ClassMethod(object):
def __init__(self,function):
self.__f = function
def __get__(self,instance,owner):
def wrap(cls):
def f(*k, **v):
self.__f(cls,*k,**v)
return f
return wrap(owner)
class StaticMethod(object):
def __init__(self,function):
self.f = function
def __get__(self, instance, owner):
return self.f
class Property(object):
def __init__(self,fget,fset=None,fdel=None):
self._fget=fget
self._fset=fset
self._fdel=fdel
def __get__(self,instance,owner):
if instance==None:
return self
if self._fget==None:
raise AttributeError('can't get attribute')
return self._fget(instance)
def __set__(self,instance,value):
if self._fset==None:
raise AttributeError('can't set attribute')
self._fset(instance,value)
def __delete__(self,instance):
if self._fdel==None:
return
self._fdel(instance)
def getter(self,fget):
self._fget=fget
return self
def setter(self,fset):
self._fset=fset
return self
def deleter(self,fdel):
self._fdel=fdel
return self