Issue7604
Created on 2009-12-30 18:46 by ferringb, last changed 2022-04-11 14:56 by admin. This issue is now closed.
| Messages (4) | |||
|---|---|---|---|
| msg97051 - (view) | Author: Ferringb (ferringb) * | Date: 2009-12-30 18:46 | |
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__...
|
|||
| msg97055 - (view) | Author: Benjamin Peterson (benjamin.peterson) * ![]() |
Date: 2009-12-30 19:36 | |
Thank you for the report. Fixed in r77157. |
|||
| msg97057 - (view) | Author: Ferringb (ferringb) * | Date: 2009-12-30 19:55 | |
Any chance of this landing in py2.7? It's really a nasty wrench in the works for some a mapping object essentially maps onto __slots__ for memory efficiency... |
|||
| msg97058 - (view) | Author: Benjamin Peterson (benjamin.peterson) * ![]() |
Date: 2009-12-30 19:58 | |
2009/12/30 Brian Harring <report@bugs.python.org>: > > Brian Harring <ferringb@gmail.com> added the comment: > > Any chance of this landing in py2.7? It's really a nasty wrench in the > works for some a mapping object essentially maps onto __slots__ for > memory efficiency... It will be in 2.6.5, 2.7, 3.1.2, and 3.2. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:56:55 | admin | set | github: 51853 |
| 2009-12-30 19:58:25 | benjamin.peterson | set | messages: + msg97058 |
| 2009-12-30 19:55:05 | ferringb | set | messages: + msg97057 |
| 2009-12-30 19:36:07 | benjamin.peterson | set | status: open -> closed nosy:
+ benjamin.peterson resolution: fixed |
| 2009-12-30 18:47:22 | ferringb | set | type: behavior |
| 2009-12-30 18:46:48 | ferringb | create | |
