<jupyter_start><jupyter_text>Clases  Introduccion: que es una claseProgramacion orientada a objectosObjetos: es una composicion de variables, propiedades y funciones/metodos.<jupyter_code>contacto1= {
    'nombre' : #propiedad
    'contactar': def contactar():
        print('Contactando contacto')
}
contacto['edad'] = 18 #variable
# Objetos son una representacion abstracta de la realidad

# Animal
# |-Domestico
#     |--- Perro
#     |--- Gato
# |-Salvaje
#     |--- Leon
#     |--- Tiburon<jupyter_output><empty_output><jupyter_text>Ver ejemplos https://es.wikipedia.org/wiki/Clase_(inform%C3%A1tica)  Como definir una clase en Python<jupyter_code># la palabra reserva class
class Animal():
    pass
# la palabra self es una palabra reservada
# indica una referencia a la misma clase que esta memoria

class Animal():
    def respirar(self):
        print('Respirar')
        pass
    def mover(self):
        print('Mover')
        pass
    def comer(self):
        print('Comer')
        pass    
# Como crear una instancia del objeto o clase

miranda = Animal()
miranda.mover()<jupyter_output>Mover<jupyter_text>HerenciaHeredar las variables, propiedades y funciones de una clase principal o padre.<jupyter_code># para crear una clases hija (que herede de la clase padre) debemos pasar 
# el nombre de la clase padre en los argumentos
class Perro(Animal):
    def mover_cola(self):
        print('Perro moviendo cola')
        pass
class Tiburon(Animal):
    pass
miranda = Perro()
miranda.mover_cola()
# Herencia
rufo = Perro()
rufo.mover_cola()
rufo.comer()
# La herencia solo es de padre a hijo, nunca de hijo a padre
rufo = Animal()
rufo.mover_cola()<jupyter_output><empty_output><jupyter_text>Como inicializar una clase<jupyter_code># Inicializar una clase es util para definir valores por default en los objetos

# la referencia a self solo es necesaria cuando se define la funcion y no cuando se crea un nuevo objeto
class Perro(Animal):
    def __init__(self, edad): # el primer argumento de init siempre debe ser self, el resto son variables del objeto
        self.edad = edad
miranda = Perro(4)
miranda.edad
class Perro(Animal):
    def __init__(self, edad, raza):
        self.raza = raza
        self.edad = edad
rufus = Perro(5, '<NAME>')

print(rufus.raza)
print(rufus.edad)
class Perro(Animal):
    def __init__(self, edad, raza):
        self.raza = raza
        self.edad = edad
    def ladrar(self):
        print('Ladrar')
rufus = Perro(3, '<NAME>')
rufus.ladrar()<jupyter_output>Ladrar<jupyter_text>Ejercicios1. Crear una clase llamada `contacto` que sea inicializada con los siguientes valores:    - nombre    - direccion    - telefono    - correo    - año de nacimiento       2. Crear una funcion dentro de la clase llamada `es_mayor_de_edad()` que verifique si el contacto es mayor de 18 anios. Si es mayor, imprimir "mayor de edad", si no imprimir "menor de edad"3. Crear una clase llamada `contacto_negocio` que herede de a clase `contacto` y que tenga una propiedad que se llame `telefono_negocio`. Ademas crear una funcion llamada `imprimir_telefono` que imprima el valor de `telefono_negocio`.<jupyter_code># Estilo de sintaxes
def contactonegocio():
    pass
def contacto_negocio():
    pass<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0917459343356858, 'fraction_numerical': 0.003988953666768947, 'mean_word_length': 3.8875562218890556, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 1, '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': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '554008', 'license': 'MIT', 'n_tokens_mistral': 1160, 'n_tokens_neox': 1156, 'n_words': 353, 'path': '8_classes.ipynb', 'repo_name': 'ricardo-hdz/cs101', 'size': '3273'}