New submission from Brian Harring <ferri...@gmail.com>: Everything I've read about __slots__, seen w/ them, etc, they're effectively just a change in the underlying allocation- yes they can limit the attributes, but that's about it.
Specifically, for general attribute access/mangling, best I can tell, they're *supposed* to be exactly equivalent when manipulating the object- the only difference being the backing store. That said, delattr against slotted objects vs non slotted differs in a rather buggy way- even worse, the behaviour differs on slotted classes dependant on if you're delattr'ing a slotted attr or a nonslotted- consider the following code. class nonslotted(object): pass class slotted(object): __slots__ = ("monkeys",) try: ns = nonslotted() assert not hasattr(ns, 'monkeys') del ns.monkeys raise AssertionError("this is unreachable") except AttributeError: pass try: s = slotted() assert not hasattr(s, 'monkeys') del s.monkeys print "slotting causes delattr to not throw an AttributeError" # and now for the kicker del s.some_attr_that_is_not_slotted except AttributeError: print "so... delattr results in AttributeError on a non-slotted attr, but throws no AttributeError on a slotted attr..." I'm guessing this isn't intentional/desired? Confirmed on py2.6/py3.1 also; that said, I'd assume it affects all versions of python that support __slots__... ---------- components: Interpreter Core messages: 97051 nosy: ferringb severity: normal status: open title: delattr __slots__ inconsistancy versions: Python 2.6, Python 3.1 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue7604> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com