Python descriptor protocol (for more or less structured data)

CWr christoph.wruck at gmail.com
Wed Jul 31 05:16:08 EDT 2013


Peter, thanks for your response.
Sure, you are right when you say that's easier to use standard attribute assigning via __init__.

But my intention was:
- reducing the complexiticity of __init__
- avoiding boiler-plates (mostly property descriptors inside of the main class)
- creating instances (for complex data strings) only if they will be needed, otherwise use default instances (descriptors) 
- make it prossible that the data structure can be used in static context - like MyClass.attr - to get default values

Standard procedure:

>>>class C:
>>>    def __init__(self, one, two=None, three=None, four=None, five=None, ...):
>>>        if not two is None:
>>>            self.two = Value(two)
>>>        else:
>>>            self.two = Value(self.DEFAULT_4_TWO)
>>>        ...

vs:

>>>class C:
>>>
>>>    two = MyDescriptor('default for two')
>>>
>>>    def __init__(self, one, two=None, three=None, four=None, five=None, ...):
>>>        self.one = one
>>>        if not two is None:
>>>            self.two = two
>>>        ...

Probably it will be necessary to set the attribute at first access. Alternatively it may be possible to observe the descriptor til an attribute will be setted e.g. instance.attr.value = 'whatever'. At this point a new instance (like Value) should be created on obj.__dict__.

It's the procedure what I'm looking for. ;)

Kind Regards,
Chris



More information about the Python-list mailing list