Represent object type as

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Thu Mar 25 12:00:34 EDT 2010


Jason a écrit :
> Hi,
> 
> I want to send objects (new style) over DBUS. DBUS can only send
> fairly primitive types[1] so I turn my objects into dicts and send
> that. I'm reusing the __getstate__ function I wrote for pickling like
> so:
> 
>     def __getstate__(self):
>         attrs = self.__dict__.copy()
>         return attrs
> 
> ...which is perfectly adequate to dict-ify and reconstitute this
> simple class. That works just fine over DBUS.
> 
> The trouble is, the object could actually be of some slightly
> different types, so I'd like to include that information as well. I
> tried something like:
> 
>     def __getstate__(self):
>         attrs = self.__dict__.copy()
>         attrs.update({'type': type(self)})

           attrs['type'] = type(self)

Do the same thing with less work !-)

Also and while we're at it, using a __magicname__ convention here (ie : 
'__type__' instead of 'type') might avoid possible collisions.

>         return attrs
> 
> ...but then realised that "type" is not primitive enough for DBUS to
> pickle.
> 
> So, (a) can I get the type name from the type object,

     attrs['__typename__'] = type(self).__name__


Warning: won't be very useful if your code still uses old-style classes.

> or (b) is there
> a better way to do this?

Depends on what you do with this dict, DBUS etc. And of your definition 
of "better", of course.


HTH



More information about the Python-list mailing list