bossylobster

Naive @property implementation

Mar 4th, 2013
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.12 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.     self.__staged_getters = []
  8.     self.__staged_setters = []
  9.     self.__staged_deleters = []
  10.   def __get__(self, instance, owner):
  11.     if instance:
  12.       return self.fget(instance)
  13.     else:
  14.       return self
  15.   def __set__(self, instance, value):
  16.     if self.fset:
  17.       self.fset(instance, value)
  18.     else:
  19.       raise AttributeError('can\'t set attribute')
  20.   def __delete__(self, instance):
  21.     if self.fdel:
  22.       self.fdel(instance)
  23.     else:
  24.       raise AttributeError('can\'t delete attribute')
  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.   def getter(self, fget):
  35.     return self.copy(fget=fget)
  36.   def setter(self, fset):
  37.     return self.copy(fset=fset)
  38.   def deleter(self, fdel):
  39.     return self.copy(fdel=fdel)
Advertisement
Add Comment
Please, Sign In to add comment