Парадокс брадобрея на Python with OOP

Это известный парадокс, вариант парадокса Рассела.
Есть код на Python, который реализует парадокс Рассела, приводя к бесконечной рекурсии.
Там используются именно множества. А я бы хотел в учебно-познавательных целях сделать вариант с брадобреем, используя OOP. Что-то вроде этого:

class Singleton(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]


class People:
    instances = set()

    def __init__(self, name, is_self_shaver):
        self.name = name
        if is_self_shaver:
            self.shaver = self
        else:
            self.shaver = None
        People.instances.add(self)

    @classmethod
    def get_instances(cls):
        return cls.instances


class Barber(People, metaclass=Singleton):
    pass

Начало, думаю, правильное: класс-синглетон Barber наследуется от People.
Через методы и свойства определяем, бреется ли человек сам.
Но мне никак не удается получить парадокс именно как бесконечную рекурсию! Как бы я не менял/добавлял методы, получается либо отсутствие объекта, либо просто "все хорошо". Пробовал и отдельную функцию, пробегающую по всем People.
Если кто-то заинтересуется, буду рад любым идеям!


Ответы (0 шт):