[Python-ideas] issubclass(collections.OrderedDict, collections.Sequence)

Ram Rachum ram at rachum.com
Mon Oct 6 10:10:50 CEST 2014


Here are a couple:

 - I'm making a combinatorics package, and a combination space needs to
have a __contains__ method that takes a combination and returns whether
it's part of a set. Since a combination, unlike a permutation, has no
order, I like to have my combinations be canonicalized in a sorted order.
For example, in a combination space of 3 items on range(4), (0, 1, 3) would
be a combination in that space, but (3, 1, 0) would not because it's not
sorted. (It's a k-permutation but not a combination.) However, if the user
does `{0, 1, 3} in comb_space` I still want to return True, regardless of
whether the set iterator happens to give these items in order or not.

 - For the same package, I'm defining `Tally` and `OrderedTally` classes.
(Simliar to `Counter` except without having an identity crisis between
being a dict subclass and counter; mine are strictly counters.) In the
tests I want to easily see whether the class I'm testing is the ordered one
or not, so I'll know to run appropriate tests. (There are also
`FrozenTally` and `FrozenOrderedTally` so it's not just one class.) I could
set `is_ordered = True` on them or give them some base class, but I think a
general `collections.Ordered` abstract base class would be the best
solution.

On Mon, Oct 6, 2014 at 2:15 AM, Guido van Rossum <guido at python.org> wrote:

> OK, so collections.Ordered would be a subclass of Iterable that adds no
> new methods but makes a promise about the author's intent.
>
> But what kind of use could a program make of this? The only things I can
> think of would have to be combined with some other specific container type
> that isn't always ordered (Sequence is ordered, Set and Mapping aren't). I
> can think of plenty of situations where it would be useful to say "use an
> OrderedDict, otherwise X will happen", but I can't think of a case where I
> could say "use any container type you like as long as it is Ordered".
>
> What was your use case? Do you have one? Or are you just interested in
> asking questions?
>
> On Sun, Oct 5, 2014 at 3:07 PM, Ram Rachum <ram at rachum.com> wrote:
>
>> Yep, Ed said exactly what I meant.
>> On Oct 6, 2014 1:05 AM, "Ed Kellett" <edk141 at gmail.com> wrote:
>>
>>> I think the definition of ordered here would be that the container's
>>> iteration order carries any meaning (compare: dicts and sets' having
>>> iteration order is an incidental effect of one thing having to be
>>> iterated out first, and one shouldn't depend on that order; lists and
>>> ordereddicts' having iteration order is deliberate).
>>>
>>> I don't think there's a mathematical definition possible - it's just a
>>> question of whether whoever wrote the class left the iteration order
>>> documented or unspecified.
>>>
>>>
>>> edk
>>>
>>
>
>
> --
> --Guido van Rossum (python.org/~guido)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20141006/85109a1e/attachment-0001.html>


More information about the Python-ideas mailing list