Как сделать объект класса с встроенным отсчётом?

Допустим есть объект человек:

class Human(Alive):
    def __init__(self, name, age):  # и еще куча полей...

Есть число 832200. Из этого числа делается отсчёт, по его истечению поля будут перенесены в другой класс.

Я понимаю что можно сделать:

self.age = 832200  # понимаю что тут должно быть time_to_death

while self.age >= 0:    
    self.age = self.age - 1

Так вот вопросы:

  1. Как привязать такой цикл к каждому объекту?
  2. Наверняка есть метод по лучше, учитывая что объектов будет 500-1000
  3. Как еще можно про инициировать старение в классе человек?

P.S объекты не должны удалятся...


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

Автор решения: CrazyElf

Не совсем понял вашу задачу, но каркас могу примерно следующий предложить, используя наследование и хранение всех экземпляров ваших объектов в объекте более высокого уровня:

import random

class Life():

    def __init__(self, age, max_age):
        self.age = age
        self.max_age = max_age

    def add_year(self):
        self.age += 1
    
    def is_alive(self):
        return self.age <= self.max_age

class Human(Life):
  
    def __init__(self, name, age):  # и еще куча полей...
        super().__init__(age, 100)
        self.name = name
  
    def __repr__(self):
        return f"Человек по имени {self.name}, возраст {self.age}"

    def get_being(self):
        return self if self.is_alive() else Soul(self.name)

class Soul():
  
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f"Душа по имени {self.name}"

    def get_being(self):
        return self

    def add_year(self):
        pass

class Planet():
     
    def __init__(self, name, population):
         self.name = name
         self.beings = []
         for i in range(population):
             name = random.choice(["Вася", "Петя", "Света", "Надя"])
             age = random.randint(0, 100)
             self.beings.append(Human(name, age))

    def __repr__(self):
        return f'Текущее население планеты {self.name}\n' + '\n'.join([repr(b) for b in self.beings])

    def add_year(self):
        for b in self.beings:
            b.add_year()
        self.beings = [b.get_being() for b in self.beings]

e = Planet("Земля", 4)
print(e)
for i in range(30):
    e.add_year()
print(e)

Вывод:

Текущее население планеты Земля
Человек по имени Света, возраст 12
Человек по имени Вася, возраст 54
Человек по имени Надя, возраст 73
Человек по имени Вася, возраст 80

Текущее население планеты Земля
Человек по имени Света, возраст 42
Человек по имени Вася, возраст 84
Душа по имени Надя
Душа по имени Вася
→ Ссылка