[PyQt] dip model types, properties, and syntax

Phil Thompson phil at riverbankcomputing.com
Wed Aug 25 18:17:44 BST 2010


On Sat, 14 Aug 2010 08:45:13 +0100, Phil Thompson
<phil at riverbankcomputing.com> wrote:
> On Mon, 9 Aug 2010 09:45:12 -0400, Darren Dale <dsdale24 at gmail.com>
wrote:
>> I have a question about using dip model attributes as properties. The
>> documentation at
>>
>
http://www.riverbankcomputing.com/static/Docs/dip/model_tutorial.html#attributes-are-properties
>> gives an example:
>> 
>> class ExampleModel(Model):
>> 
>>     name = Str
>> 
>>     def _get_name(self):
>>         return self._name
>> 
>>     def _set_name(self, value):
>>         self._name = value
>> 
>>     # method taken from previous section in documentation:
>>     def _default_name(self):
>>         import name_database
>>         return name_database.most_common_name()
>> 
>> 
>> Would it be possible for dip's model types to support the property
>> decorator syntax introduced in Python-2.6? If so, the above example
>> could then be implemented as:
>> 
>> class ExampleModel(Model):
>> 
>>     name = Str
>> 
>>     @name.getter
>>     def name(self):
>>         return self._name
>> 
>>     @name.setter
>>     def name(self, value):
>>         self._name = value
>> 
>>     @name.default
>>     def name(self):
>>         import name_database
>>         return name_database.most_common_name()
>> 
>> The virtue, aside from reusing an already familiar pattern in the
>> standard library, is that the ExampleModel namespace has fewer exposed
>> private methods, which is desirable for models intended to be used and
>> inspected in an interactive python environment like IPython.
> 
> Hmm - interesting. It's more verbose but it is nicer. It could also
> support observers and allow declarative observers across classes. It may
> also be faster.

Unfortunately I can't think of a way to implement it. The problem arises
because "name = Str" is allowed as a shortcut for "name = Str()" and there
doesn't seem to be a way to implement (for example) getter() so that it can
cope with the different cases.

Phil


More information about the PyQt mailing list