Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение
Если вы хотите поведение, когда невозможно создать Animal с id = 1 и Cat с id = 1:
class Animal:
    __cache__ = dict()

    def __new__(cls, id, *args, **kwargs):
        if id not in cls.__cache__:
            cls.__cache__[id] = id

            return super().__new__(cls)
        else:
            raise Exception('ID уже существует')

    def __init__(self, id):
        self.id = id


class Cat(Animal):
    def __init__(self, id, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        super().__init__(id)


if __name__ == '__main__':
    for item in range(10000):
        a = Animal(item)
        print(a)

    for item in range(10000, 20000):
        b = Cat(item, 1, 2, 3)
        print(b)


Если вы хотите поведение, когда можно создать Animal с id=1 и Cat с id=1:
class Animal:
    __cache__ = dict()

    def __new__(cls, id, *args, **kwargs):
        if id not in cls.__cache__:
            cls.__cache__[id] = id

            return super().__new__(cls)
        else:
            raise Exception('ID уже существует')

    def __init__(self, id):
        self.id = id


class Cat(Animal):
    __cache__ = dict()

    def __init__(self, id, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        super().__init__(id)


if __name__ == '__main__':
    for item in range(10000):
        a = Animal(item)
        print(a)

    for item in range(10000):
        b = Cat(item, 1, 2, 3)
        print(b)

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность