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