Если вы хотите поведение, когда невозможно создать 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)
Если вы хотите поведение, когда можно создать Animal с id=1 и Cat с id=1: