On 18 February 2002, Kevin Jacobs said: > My recent post on __slots__ not being picklable (and the resounding lack of > response to it) Certainly caught my attention, but I had nothing to add. > 1) Should class instances explicitly/directly know all of their attributes? I'm not sure you're asking the right question. If you're concerned with introspection, shouldn't the question be: "Should arbitrary code be able to find out the set of attributes associated with a given object?" The Pythonic answer is clearly yes. And if "attribute" means "something that follows a dot", then you can do this using dir(). Unfortunately, the expansion of dir() to include methods means it's no longer very useful for getting just instance attributes, whether they're in a __dict__ or some other method. So the obvious answer is to use vars(), which works on classic classes and __slots__-less new-style classes. (I think vars(x) is just a more sociable way to spell x.__dict__.) But it bombs on classes with __slots__: >>> class C(object): ... __slots__ = ['a', 'b'] ... >>> c = C() >>> vars(c) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: vars() argument must have __dict__ attribute Uh-oh. This is a problem. > 3) Should __slots__ be immutable? Yes, definitely. Clearly __slots__ is a property of the type (class), not of the instance, and once the class is defined, that's it. (Or that should be it.) It looks as though you can modify __slots__, but it has no effect; that's mildly bogus. > 4) Should __slots__ be flat? Hmmmm... probably. That's certainly consistent with "... once the class is defined, that's it". Greg -- Greg Ward - geek-at-large gward@python.net http://starship.python.net/~gward/ If you and a friend are being chased by a lion, it is not necessary to outrun the lion. It is only necessary to outrun your friend.
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