bossylobster

Pure Python property implementation

Jan 9th, 2013
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.01 KB | None | 0 0
  1. class pproperty(object):
  2.   def __init__(self, fget, fset=None, fdel=None, doc=None):
  3.     self.fget = fget
  4.     self.fset = fset
  5.     self.fdel = fdel
  6.     self.doc = doc or fget.__doc__
  7.  
  8.   def __get__(self, instance, owner):
  9.     if instance:
  10.       return self.fget(instance)
  11.     return self
  12.  
  13.   def __set__(self, instance, value):
  14.     if self.fset:
  15.       self.fset(instance, value)
  16.     else:
  17.       raise AttributeError('can\'t set attribute')
  18.  
  19.   def __delete__(self, instance):
  20.     if self.fdel:
  21.       self.fdel(instance)
  22.     else:
  23.       raise AttributeError('can\'t delete attribute')
  24.  
  25.   def copy(self, **override_kwargs):
  26.     curr_kwargs = {
  27.         'fget': self.fget,
  28.         'fset': self.fset,
  29.         'fdel': self.fdel,
  30.         'doc': self.doc,
  31.     }
  32.     curr_kwargs.update(override_kwargs)
  33.     return self.__class__(**curr_kwargs)
  34.  
  35.   def getter(self, fget): return self.copy(fget=fget)
  36.   def setter(self, fset): return self.copy(fset=fset)
  37.   def deleter(self, fdel): return self.copy(fdel=fdel)
Advertisement
Add Comment
Please, Sign In to add comment