from random import randint
class Pessoa:

    ano_atual = 2019

    def __init__(self, nome, idade, comendo=False, falando=False):
        self.nome = nome
        self.idade = idade
        self.comendo = comendo
        self.falando = falando

    def falar(self, assunto):
        if self.comendo:
            print(f'{self.nome} não pode falar comendo.')
            return

        if self.falando:
            print(f'{self.nome} já está falando.')
            return

        print(f'{self.nome} está falando sobre {assunto}.')
        self.falando = True

    def parar_falar(self):
        if not self.falando:
            print(f'{self.nome} não está falando')

        print(f'{self.nome} parou de falar')
        self.falando = False

    def comer(self, alimento):
        if self.comendo:
            print(f'{self.nome} já está comendo.')
            return

        if self.falando:
            print(f'{self.nome} não pode comer falando')
            return

        print(f'{self.nome} está comendo {alimento}.')
        self.comendo = True

    def parar_comer(self):
        if not self.comendo:
            print(f'{self.nome} não está comendo.')
            return

        print(f'{self.nome} parou de comer.')
        self.comendo = False

    # metodo de instância, precisa receber o self como parametro
    def get_ano_nascimento(self):
        print(self.ano_atual - self.idade)

    # metodo relativo a classe, não precisa de instância para utilizar o metodo, mas precisa da classe em si
    # para coisas globais da classe
    @classmethod
    def por_ano_nascimento(cls, nome, ano_nascimento):
        idade = cls.ano_atual - ano_nascimento
        return cls(nome, idade)

    # "função normal", utiliza a instância ou a classe para utiliza-lo, dentro do corpo dele não pode utilizar o self ou cls (classe)
    @staticmethod
    def gera_id():
        rand = randint(10000, 19999)
        return rand