Bruno Desthuilliers
3/25/2010 4:01:00 PM
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