[Python-Dev] Fwd: Python 3.3 can't sort memoryviews as they're unorderable
Steven D'Aprano
steve at pearwood.info
Thu Oct 25 18:18:47 CEST 2012
On 26/10/12 02:57, Mark Lawrence complained that he can't subclass memoryviews:
> I'm guessing that I've missed something that's blatantly obvious to
>everybody except myself. I can't find a rationale anywhere as to why
>I can't subclass memoryviews for my code, so I can't work around
>what I perceive as a glaring deficiency. Is it a case whereby even
>consenting adults aren't allowed?
>
> This strikes me as so different to the Python that I've been using
>for the last 10 years that it stood out, at least to me, like a sore
>thumb. Perhaps I need yet another visit to the opticians?
Possibly. There are many things that you can't subclass in Python.
NoneType
NotImplementedType
Ellipsis
functions
slices
frames
tracebacks
and probably others.
As annoying as it is when you run into something like this, it's hardly
without precedent. Hell, for about half of Python's existence, you
couldn't even subtype basic types like int, str and list!
Subclassing is not the only way to add functionality to a class. While
it is much less convenient with new-style classes than classic classes,
why don't you try delegation? Actually, since the problem you are
trying to solve is to sort a list of memoryviews, you don't even need
delegation. You just need a dirt-simple key function.
py> mv = memoryview
py> x = list(map(mv, (b'xyz', b'abc', b'pqr')))
py> x.sort(key=lambda x: x.obj)
py> [a.obj for a in x]
[b'abc', b'pqr', b'xyz']
What was the problem again?
:)
--
Steven
More information about the Python-Dev
mailing list