> If a class and its superclass both define __slots__, it appears that > __getstate__() is not inherited from the superclass. Example: > > """ > class Base (object): > __slots__ = [] > > def __getstate__ (self): > return tuple([getattr(self, attr) for attr in self.__slots__]) > > class Thing (Base): > __slots__ = ['a', 'b'] > > def __init__ (self): > self.a = 42 > self.b = "boo!" > > abstract = Base() > thing = Thing() > > print abstract.__getstate__ > print thing.__getstate__ > """ > > When I run this with a not-quite-current CVS Python: > > <bound method Base.__getstate__ of <__main__.Base object at 0x401f73b8>> > <built-in function __getstate__> > > The upshot of this is that I can't just define one __getstate__() in the > superclass of a bunch of __slots__-using classes -- I guess I'll have to > set __getstate__ manually for each class. ;-( If this is a feature, is > it documented anywhere? > > (BTW, I see the same behaviour with Python 2.2.2.) It's a feature. When a class defines __slots__ and not __getstate__, it gets a bogus __getstate__ that always raises an exception. The assumption is that the base class __getstate__ doesn't know about the subclass slots and hence is unlikely to be able to retrieve them correctly. BTW, your code for accessing the slots by saying self.__slots__ doesn't work in general: self.__slots__ returns the __slots__ variable of the most derived class only. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4