<jupyter_start><jupyter_text>Inheritance in python<jupyter_code>class LivingBeing(): #la herencia sirve para crear una clase, ser vivo que tiene atributos otras clases por debajo, por ejemplo ser humano tiene los atributos de ser vivo
    """Father/Mother class"""
    def __init__(self, kingdom, born_date, color,days_lived=0, procreate_ability=True): #atributos parametrizados que puedes cambiar ala hora de crear una instancia 
        self.is_living = True #atributos no parametrizados auqellos que pongo abajo y no arriba, vivir y morir son fijos hasta que los cambies
        self.kingdom = kingdom
        self.procreate_ability = procreate_ability
        self.born_date = born_date
        self.death_date = None # siempre va a tener un none a no ser que lo cambie con la funcion de die 
        self.days_lived = days_lived #desde el def __init__ hasta esta linea se denomina constructor de la clase
        self.color = color
    def living_being_function(self):
        print("I am a living being!")

    def die(self,death_date):
        print("Murió")
        self.is_living = False
        self.death_date = death_date #"05/05/2021" poner la fecha no es buena praxis mejor poner la fecha y que se introduzca cual es 
def new_day(a_class): #instancia de una clase
    a_class.days_lived += 1#atributo de la clase que tu quieras y le sumas un dia
celula = LivingBeing(kingdom="Animal", born_date="18/06/2019",days_lived=520, color="Transparente")
print("celula.days_lived:", celula.days_lived)
new_day(a_class=celula)
print("celula.days_lived:", celula.days_lived)
print("celula.is_living:",celula.is_living)
celula.die(death_date="05/05/2021")
print("celula.is_living:",celula.is_living)
humano = LivingBeing(kingdom="Animal", born_date="21/06/2019", color="piel")
print("humano.is_living:", humano.is_living)
print("humano.death_date:", humano.death_date) #por defecto es none
humano.die(death_date="05/05/2021")
print("humano.is_living:", humano.is_living)
print("humano.death_date:", humano.death_date)
#EXTRA FECHAS, CALENDARIOS
from datetime import datetime as dt
dt.now() #te calcula el momento de ahora 
class Human(LivingBeing): #humano hereda de ser vivo
    """Children class"""
    def __init__(self, born_date, color="el de la piel", procreate_ability=True, eyes=2, legs=2, intelligence_ability=True): #esta en el constructor de ser humano
        #Herencia
        LivingBeing.__init__(self, kingdom="Human", color=color, procreate_ability=procreate_ability, born_date=born_date) #aqui se manda a constructor de ser vivo ejemplo: procreate_ability=procreate_ability se necesita hilar con la clase humano
       #esto son de humano
        self.eyes = eyes
        self.legs = legs
        self.intelligence_ability = intelligence_ability
    
    
humano = Human(born_date="13/05/1991") #instancia humano

print("humano.is_living:", humano.is_living)
print("\nCalling to living_being_function():\n")
humano.living_being_function()
humano_esteril = Human(born_date="13/05/1991", procreate_ability=False) #instancia humano_esteril

print("humano.is_living:", humano_esteril.is_living)
print("\nCalling to living_being_function():\n")
humano_esteril.living_being_function()
humano_esteril.procreate_ability
humano.days_lived # en el constructor de ser humano no hay ningun atributo que permita pasar los dias vividos y al pasarle el construcotr de ser vivo a humano tampoco le pasamos ningun atributo a dias vividos asi que los dias vividos son 0

new_day(humano)
humano.days_lived #aqui se ve que es 1 xq no le podemos pasar los dias<jupyter_output><empty_output><jupyter_text>class Perro(LivingBeing):     TODO<jupyter_code>class Perro(LivingBeing):
    def __init__(self, raza, color, born_date, patas=4, ojos=2, cola=True, agresivo=False): #raza tiene que ir antes de los iguales 
        LivingBeing.__init__(self, kingdom="Animal", born_date=born_date, color=color)#como siempre los perros son animales, no hace falta ponre kingdom en la clase perro
        self.raza = raza
        self.patas = patas
        self.ojos = ojos
        self.patas = patas
        self.agresi = agresivo
        
doby=Perro(raza="San Bernardo",color="Marrón y blanco", born_date="05/05/2020")
doby.agresi #se llama a la variable "agresi"
class Costumer:
    def __init__(self, id, address, phone, email):
        self.id=id
        self.address = address
        self.phone = phone
        self.email = email
pepito=Costumer(id=4857384, addres="<NAME>", phone=43634, email="<EMAIL>")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09571175950486295, 'fraction_numerical': 0.019230769230769232, 'mean_word_length': 4.58641975308642, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '248859', 'license': 'MIT', 'n_tokens_mistral': 1615, 'n_tokens_neox': 1490, 'n_words': 426, 'path': 'week4_EDA_np_pd_json_apis_regex/day2_numpy_pandas_II/theory/python/inheritance.ipynb', 'repo_name': 'PabloEduardoMartinezPicazo/Bootcamp-DataScience-2021', 'size': '4544'}