6. Симулятор семьи.

(открыть в новой вкладке)

Условие:

Нужно создать класс Human, в котором объекты - это люди с атрибутами имя, пол, статус (на ком женат или холост).
Необходимо создать метод, который женит людей и соответственно меняет их статус.
Необходимо создать метод, который рожает детей в семье. В случае однополых браков появление ребёнка невозможно.

Код:

import random

class Human:
    def __init__(self, name, sex):
        self.__name = name                                                              # имя человека
        self.__sex = sex.upper()                                                        # пол человека
        self.__status = None                                                            # статус человека (на ком женат или замужем)

    def __repr__(self):
        return f"Имя: {self.__name}. Пол: {self.__sex}. Статус: {self.__status}."
    
    def marry(self, human):                                                             # метод "поженить человека"
        if isinstance(human, Human):                                                    # проверим является ли переданный параметр (в нашем случае ann) класса Human            
            self.__status = human.__name                                                # для john меняем статус на ann
            human.__status = self.__name                                                # для ann (human) меняес статус на john (self)
        else:
            raise TypeError("Объект не человек.")
        
    def born_child(self, partner):                                                      # метод "родить ребёнка"
        if self.__status == partner.__name and self.__sex != partner.__sex:             # если статус равен имени параметра в переданном методе и пол разный, то ребёнок получится
            return Human("child", random.choice(["man", "women"]))
        else:
            raise Exception("Не могут иметь детей.")

################### проверка программы ##################################################################################################################################

# создаём два объекта разного пола       
john = Human("John", "man")                                                             
ann = Human("Ann", "women")

# женим их
john.marry(ann)

# рожаем 2х детей
child_1 = john.born_child(ann)
child_2 = john.born_child(ann)

# печатаем все объекты класса (двух родителей и их двух детей)
print(ann)
print(john)
print(child_1)
print(child_2)