On 2010-02-13 06:51 , Ernest Adrogué wrote:
Hello everybody,
I'm designing a container class that supports slicing.
The problem is that I don't really know how to do it.
class MyClass(object):
def __init__(self, input_data):
self._data = transform_input(input_data)
def __getitem__(self, key):
if isinstance(key, slice):
# return a slice of self
pass
else:
# return a scalar value
return self._data[key]
The question is how to return a slice of self.
First I need to create a new instance... but how? I can't
use MyClass(self._data[key]) because the __init__ method
expects a different kind of input data.
Another option is
out = MyClass.__new__(MyClass)
out._data = self._data[key]
return out
But then the __init__ method is not called, which is
undesirable because subclasses of this class might need
to set some custom settings in their __init__ method.
So what is there to do? Any suggestion?
I highly recommend making __init__() constructors do as little computation as
possible. You can add other constructors using @classmethod that do convenient
transformations.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
--
http://mail.python.org/mailman/listinfo/python-list