[Python-Dev] Non-string keys in type dict (original) (raw)

PJ Eby pje at telecommunity.com
Thu Mar 8 18:16:28 CET 2012


On Thu, Mar 8, 2012 at 2:43 AM, Ethan Furman <ethan at stoneleaf.us> wrote:

PJ Eby wrote:

Short version: AddOns are things you can use to dynamically extend instances -- a bit like the "decorator" in "decorator pattern" (not to be confused with Python decorators). Rather than synthesize a unique string as a dictionary key, I just used the AddOn classes themselves as keys. This works fine for object instances, but gets hairy once classes come into play. Are you able to modify classes after class creation in Python 3? Without using a metaclass?

For ClassAddOns, it really doesn't matter; you can't remove them from the class they attach to. Addons created after the class is finalized use a weakref dictionary to attach to their classes.

Now that I've gone back and looked at the code, the only reason that ClassAddOns even use the class dict in the first place is because it's a convenient place to put them while the class is being built. With only slightly hairier code, I could use an addons dict in the class namespace while it's being built, but there'll then be a performance hit at look up time to do cls.dict['addons'][key] instead of cls.dict[key].

Actually, now that I'm thinking about it, the non-modifiability of class dictionaries is actually a feature for this use case: if I make an addons dict, that dict is mutable. That means I'll have to move to string keys or have some sort of immutable dict type available... ;-) (Either that, or do some other, more complex refactoring.) -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20120308/d9c3fff2/attachment.html>



More information about the Python-Dev mailing list