one-time initialization of class members
Steven D'Aprano
steve at REMOVE.THIS.cybersource.com.au
Wed Jun 13 21:03:50 EDT 2007
On Wed, 13 Jun 2007 23:55:02 +0000, James Turk wrote:
> On Jun 13, 6:54 pm, Steven Bethard <steven.beth... at gmail.com> wrote:
>> James Turk wrote:
>> > Hi,
>>
>> > I have a situation where I have some class members that should only be
>> > done once. Essentially my problem looks like this:
>>
>> > class Base(object):
>> > dataset = None
>>
>> > def __init__(self, param):
>> > if type(self).dataset is None:
>> > # code to load dataset based on param, expensive
>>
>> > class ChildClass1(Base):
>> > def __init__(self):
>> > Base.__init__(self, data_params)
>>
>> > class AnotherChildClass(Base):
>> > def __init__(self):
>> > Base.__init__(self, other_data_params)
>>
>> > This seems to work, initialization is only done at the first creation
>> > of either class. I was just wondering if this is the 'pythonic' way
>> > to do this as my solution does feel a bit hackish.
>>
>> What should happen with code like::
>>
>> ChildClass1('foo')
>> ChildClass1('bar')
>>
>> The 'param' is different, but 'dataset' should only get set the first time?
>>
>> STeVe
>
> ChildClass doesn't take the parameter in it's constructor, it supplies
> it for the BaseClass. Every ChildClass of the same type should use
> the same dataset.
Then each type of ChildClass should be a sub-class, and provide it's own
dataset:
class BaseClass:
dataset = None
# blah blah blah...
class ChildClass1(BaseClass):
dataset = SomethingUseful
class ChildClass2(BaseClass):
dataset = SomethingElse
--
Steven.
More information about the Python-list
mailing list