Как сделать объект класса с встроенным отсчётом?
Допустим есть объект человек:
class Human(Alive):
def __init__(self, name, age): # и еще куча полей...
Есть число 832200. Из этого числа делается отсчёт, по его истечению поля будут перенесены в другой класс.
Я понимаю что можно сделать:
self.age = 832200 # понимаю что тут должно быть time_to_death
while self.age >= 0:
self.age = self.age - 1
Так вот вопросы:
- Как привязать такой цикл к каждому объекту?
- Наверняка есть метод по лучше, учитывая что объектов будет 500-1000
- Как еще можно про инициировать старение в классе человек?
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
Душа по имени Надя
Душа по имени Вася