OrderedCounter, возвращающий RecursionError - PullRequest
0 голосов
/ 12 июня 2019

Я пробовал заказанный счетчик, основываясь на выступлении Раймона Хеттингера в PyCon 2015 .Я пытаюсь сделать то же самое с python 3.6.8

from collections import Counter, OrderedDict

class OrderedCounter(Counter, OrderedDict):

    def __repr__(self):
        return "{}({})".format(self.__class__.__name__,
                               OrderedCounter(self))

    def __reduce__(self):
        return self.__class__, (OrderedCounter(self),)

При попытке этого кода

ox = OrderedCounter("abrac")
ox

Трассировка выглядит следующим образом

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/tmp/py30539GwP", line 8, in __repr__
  File "/tmp/py30539GwP", line 8, in __repr__
  File "/tmp/py30539GwP", line 8, in __repr__
  [Previous line repeated 194 more times]
  File "/home/blue/.pyenv/versions/3.6.8/lib/python3.6/collections/__init__.py", line 535, in __init__
    self.update(*args, **kwds)
  File "/home/blue/.pyenv/versions/3.6.8/lib/python3.6/collections/__init__.py", line 614, in update
    if isinstance(iterable, Mapping):
  File "/home/blue/.pyenv/versions/3.6.8/lib/python3.6/abc.py", line 184, in __instancecheck__
    if subclass in cls._abc_cache:
  File "/home/blue/.pyenv/versions/3.6.8/lib/python3.6/_weakrefset.py", line 72, in __contains__
    wr = ref(item)
RecursionError: maximum recursion depth exceeded while calling a Python object

Может кто-нибудь пожалуйстаскажите мне возможную причину и решение?Если я что-то упустил, переоценил или недооценил конкретный момент, дайте мне знать в комментариях.

...