diff --git a/doc/source/release.rst b/doc/source/release.rst index 62ca11b6cef0b..b3fb032493a18 100644 --- a/doc/source/release.rst +++ b/doc/source/release.rst @@ -287,6 +287,7 @@ See :ref:`Internal Refactoring` - Refactor of Series arithmetic with time-like objects (datetime/timedelta/time etc.) into a separate, cleaned up wrapper class. (:issue:`4613`) - Complex compat for ``Series`` with ``ndarray``. (:issue:`4819`) +- Removed unnecessary ``rwproperty`` from codebase in favor of builtin property. (:issue:`4843`) Experimental Features ~~~~~~~~~~~~~~~~~~~~~ diff --git a/pandas/core/internals.py b/pandas/core/internals.py index e22202c65c140..c265d1590af95 100644 --- a/pandas/core/internals.py +++ b/pandas/core/internals.py @@ -24,7 +24,6 @@ from pandas.tslib import Timestamp from pandas import compat from pandas.compat import range, lrange, lmap, callable, map, zip -from pandas.util import rwproperty class Block(PandasObject): @@ -1450,22 +1449,22 @@ def shape(self): def itemsize(self): return self.dtype.itemsize - @rwproperty.getproperty + @property def fill_value(self): return self.values.fill_value - @rwproperty.setproperty + @fill_value.setter def fill_value(self, v): # we may need to upcast our fill to match our dtype if issubclass(self.dtype.type, np.floating): v = float(v) self.values.fill_value = v - @rwproperty.getproperty + @property def sp_values(self): return self.values.sp_values - @rwproperty.setproperty + @sp_values.setter def sp_values(self, v): # reset the sparse values self.values = SparseArray( diff --git a/pandas/core/series.py b/pandas/core/series.py index 7d3cce8c80f72..893483f0f2636 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -37,7 +37,6 @@ from pandas import compat from pandas.util.terminal import get_terminal_size from pandas.compat import zip, lzip, u, OrderedDict -from pandas.util import rwproperty import pandas.core.array as pa @@ -797,19 +796,19 @@ def __contains__(self, key): return key in self.index # complex - @rwproperty.getproperty + @property def real(self): return self.values.real - @rwproperty.setproperty + @real.setter def real(self, v): self.values.real = v - @rwproperty.getproperty + @property def imag(self): return self.values.imag - @rwproperty.setproperty + @imag.setter def imag(self, v): self.values.imag = v diff --git a/pandas/sparse/series.py b/pandas/sparse/series.py index 21a054e6fe1a3..537b88db3c1f0 100644 --- a/pandas/sparse/series.py +++ b/pandas/sparse/series.py @@ -21,7 +21,6 @@ import pandas.index as _index from pandas import compat -from pandas.util import rwproperty from pandas.sparse.array import (make_sparse, _sparse_array_op, SparseArray) from pandas._sparse import BlockIndex, IntIndex @@ -213,11 +212,11 @@ def get_values(self): def block(self): return self._data._block - @rwproperty.getproperty + @property def fill_value(self): return self.block.fill_value - @rwproperty.setproperty + @fill_value.setter def fill_value(self, v): self.block.fill_value = v diff --git a/pandas/util/rwproperty.py b/pandas/util/rwproperty.py deleted file mode 100644 index 2d0dada68cc0e..0000000000000 --- a/pandas/util/rwproperty.py +++ /dev/null @@ -1,75 +0,0 @@ -# Read & write properties -# -# Copyright (c) 2006 by Philipp "philiKON" von Weitershausen -# philikon@philikon.de -# -# Freely distributable under the terms of the Zope Public License, v2.1. -# -# See rwproperty.txt for detailed explanations -# -import sys - -__all__ = ['getproperty', 'setproperty', 'delproperty'] - -class rwproperty(object): - - def __new__(cls, func): - name = func.__name__ - - # ugly, but common hack - frame = sys._getframe(1) - locals = frame.f_locals - - if name not in locals: - return cls.createProperty(func) - - oldprop = locals[name] - if isinstance(oldprop, property): - return cls.enhanceProperty(oldprop, func) - - raise TypeError("read & write properties cannot be mixed with " - "other attributes except regular property objects.") - - # this might not be particularly elegant, but it's easy on the eyes - - @staticmethod - def createProperty(func): - raise NotImplementedError - - @staticmethod - def enhanceProperty(oldprop, func): - raise NotImplementedError - -class getproperty(rwproperty): - - @staticmethod - def createProperty(func): - return property(func) - - @staticmethod - def enhanceProperty(oldprop, func): - return property(func, oldprop.fset, oldprop.fdel) - -class setproperty(rwproperty): - - @staticmethod - def createProperty(func): - return property(None, func) - - @staticmethod - def enhanceProperty(oldprop, func): - return property(oldprop.fget, func, oldprop.fdel) - -class delproperty(rwproperty): - - @staticmethod - def createProperty(func): - return property(None, None, func) - - @staticmethod - def enhanceProperty(oldprop, func): - return property(oldprop.fget, oldprop.fset, func) - -if __name__ == "__main__": - import doctest - doctest.testfile('rwproperty.txt')