Commit f99465b6 authored by Mario Chirinos Colunga's avatar Mario Chirinos Colunga 💬

herencia

parent 0c537b58
......@@ -12,13 +12,13 @@
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"class Dog:\n",
" tricks = [] # Variable de clase\n",
" kind = 'canine' # Variable de clase\n",
" kind = 'Canis Lopus' # Variable de clase\n",
" def __init__(self, name): # Constructor de clase\n",
" self.name = name # Variable de instancia\n",
" def add_trick(self, trick):\n",
......@@ -33,7 +33,7 @@
{
"data": {
"text/plain": [
"'canine'"
"'Canis Lopus'"
]
},
"execution_count": 4,
......@@ -88,7 +88,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
......@@ -104,7 +104,7 @@
{
"data": {
"text/plain": [
"'canine'"
"'Canis Lopus'"
]
},
"execution_count": 8,
......@@ -124,7 +124,7 @@
{
"data": {
"text/plain": [
"'canine'"
"'Canis Lopus'"
]
},
"execution_count": 9,
......@@ -139,7 +139,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 10,
"metadata": {},
"outputs": [
{
......@@ -148,7 +148,7 @@
"['roll over', 'play dead']"
]
},
"execution_count": 16,
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
......@@ -161,12 +161,12 @@
},
{
"cell_type": "code",
"execution_count": 26,
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"class Dog:\n",
" __kind = 'canine' # Variable de clase Privada\n",
" __kind = 'Canis Lopus' # Variable de clase Privada\n",
" def __init__(self, name):\n",
" self.name = name # Variable de instancia\n",
" self.tricks = [] # Variable de instancia\n",
......@@ -199,23 +199,24 @@
},
{
"cell_type": "code",
"execution_count": 32,
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'canine'"
"'Canis Lopus'"
]
},
"execution_count": 32,
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Max = Dog(\"Max\")\n",
"Max.get_kind()\n"
"Max.get_kind()\n",
"Max._Dog__kind"
]
},
{
......@@ -232,11 +233,11 @@
"\n",
"### 3.3.1 Metodos Estaticos\n",
"**@staticmethod**\n",
"Los metodos estatcos no requieren que exista una instancia de la clase y no conocen nada sobre la clase solo sus parametros de entrada.\n",
"Los metodos estaticos no requieren que exista una instancia de la clase y no conocen nada sobre la clase solo sus parametros de entrada.\n",
"\n",
"\n",
"### 3.3.2 Metodos de Clase\n",
"**@classmethod** Los metodos de clase n requiren que exista a una instancia de la clase y tiene acceso a las variables de clase y solo toman como entrada un unico parametro.\n",
"**@classmethod** Los metodos de clase no requiren que exista a una instancia de la clase y tiene acceso a las variables de clase y solo toman como entrada un unico parametro.\n",
"\n",
"### 3.3.2 Destructor\n",
"En Python, los destructores no son tan necesarios como en C ++ porque Python tiene un recolector de basura que maneja la administración de la memoria automáticamente.\n",
......@@ -245,22 +246,15 @@
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 59,
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"class Dog:\n",
" __kind = 'Canis Lupus' # Variable de clase Privada\n",
" __kind = 'Canis Lopus' # Variable privada de clase, para evitar que se modifique\n",
" def __init__(self, name):\n",
" self.name = name # Variable de instancia\n",
" self.tricks = [] # Variable de instancia\n",
" self.tricks = [] # Variable de instancia, para tenenr trucos diferentes por instancia\n",
" def add_trick(self, trick):\n",
" self.tricks.append(trick)\n",
" @classmethod\n",
......@@ -277,7 +271,7 @@
},
{
"cell_type": "code",
"execution_count": 60,
"execution_count": 13,
"metadata": {},
"outputs": [
{
......@@ -295,16 +289,16 @@
},
{
"cell_type": "code",
"execution_count": 61,
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Canis Lupus'"
"'Canis Lopus'"
]
},
"execution_count": 61,
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
......@@ -322,26 +316,26 @@
},
{
"cell_type": "code",
"execution_count": 62,
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"class Malinois(Dog):\n",
" __age = 0\n",
" origin = \"Bélgica\"\n",
" def fetch(self):\n",
" print(\"fetch\")"
" print(\"Fetch\")"
]
},
{
"cell_type": "code",
"execution_count": 63,
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Canis Lupus\n",
"Canis Lopus\n",
"Max\n",
"[]\n"
]
......@@ -356,14 +350,15 @@
},
{
"cell_type": "code",
"execution_count": 66,
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"class Malinois(Dog):\n",
" __breed = \"Malinois\"\n",
" origin = \"Bélgica\"\n",
" def __init__(self, name):\n",
" Dog.__init__(self, name)\n",
" super().__init__(name) #Dog.__int__(self,name)\n",
" self.tricks = [\"Fetch\"] # Variable de instancia\n",
" def fetch(self):\n",
" print(\"fetch\")\n",
......@@ -374,37 +369,139 @@
},
{
"cell_type": "code",
"execution_count": 67,
"execution_count": 61,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Canis Lupus\n",
"Max\n",
"['Fetch']\n",
"Max es un Canis Lupus de raza Malinois\n",
"Max a muerto\n"
"Canis Lopus\n",
"Keeper\n",
"['fetch']\n",
"Keeper es un Canis Lopus Policia de raza Malinois con uniforme Azul\n",
"Keeper a muerto\n"
]
}
],
"source": [
"max = Malinois(\"Max\")\n",
"print(max.get_kind())\n",
"print(max.name)\n",
"print(max.tricks)\n",
"print(max)\n",
"del(max)"
"keeper = Malinois(\"Keeper\")\n",
"print(keeper.get_kind())\n",
"print(keeper.name)\n",
"print(keeper.tricks)\n",
"print(keeper)\n",
"del(keeper)"
]
},
{
"cell_type": "markdown",
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [],
"source": [
"class Police:\n",
" uniform = \"Azul\"\n",
" def __init__(self, section):\n",
" self.section=section\n",
" def get_section(self):\n",
" return self.section\n",
" def __del__(self): \n",
" print(\"Dia de Jubilacion\") \n",
" \n",
"# Herencia Multiple\n",
"class Malinois(Dog, Police):\n",
" __breed = \"Malinois\"\n",
" origin = \"Bélgica\"\n",
" def __init__(self, name):\n",
" Dog.__init__(self, name)\n",
" Police.__init__(self,\"K9\")\n",
" self.tricks = [\"fetch\"] # Variable de instancia\n",
" def fetch(self):\n",
" print(\"fetch\")\n",
" def __str__(self): #Overriding\n",
" # Obteniendo variable privada de la clase Padre\n",
" return self.name + \" es un \" + self._Dog__kind + \" Policia de raza \" + self.__breed + \" con uniforme \" + self.uniform\n",
" def __str__(self): #Overriding\n",
" return \"Llego el Fin\"\n"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'name': 'Frida', 'tricks': ['fetch'], 'section': 'K9'}\n",
"K9\n",
"Llego el Fin\n",
"Frida a muerto\n"
]
}
],
"source": [
"frida = Malinois(\"Frida\")\n",
"print(frida.__dict__)\n",
"\n",
"print(frida.get_section())\n",
"print(frida)\n",
"del(frida)"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'Mailinois' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-80-35e40b7a7cfb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mMailinois\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'Mailinois' is not defined"
]
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"## 3.5 Polimorfismo"
"\n",
"\n",
"## 3.5 Polimorfismo\n",
"Polimorfismo se refiere a la caracteristica de que la misma clase de objeto pueda adquirir varias formas. A diferencia de otros lenguajes como C++ en donde para lograr polimorfismo se requiren de considereciones especiales en la herencia y la sintaxis. En Python el polimorfismo es consecuencia de el tipado dinamico sin tener que tener considerecciones especiales."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
......@@ -418,7 +515,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3.7 Ejercicios\n",
"## 3.6 Ejercicios\n",
"Como recordarán, el proyecto final consiste en desarrollar un periódico inteligente en el cual, un usuario podrá elegir ciertos temas de interés personal, por ejemplo: ”Política de relaciones exteriores”, ”Francia”, ”Música”, ”Pearl Jam”; y el sistema colectará noticias de diversas fuentes y deberá procesar los documentos para determinar la relevancia de los mismos con respecto a los temas de interés del usuario.\n",
"\n",
"**Instrucciones**: Lea con atención las siguientes especificaciones y diseñe las clases descritas a continuación.\n",
......@@ -434,13 +531,13 @@
"\n",
"Además de estas clases, puede incluir algunas otras clases que considere necesario incluyendo la justificación. \n",
"\n",
"### 3.7.1 La Clase Nota\n",
"### 3.6.1 La Clase Nota\n",
"La clase Nota debe abstraer el concepto de una nota periodística; una noticia que aparece en alguna fuente informativa. Algunas características principales de las Notas es que debe pertenecer a alguna categoría como \"deportes\" o \"cultura\", deben tener un título, un autor, una fecha de publicación, entre otros atributos.\n",
"### 3.7.2 La Clase Fuente\n",
"### 3.6.2 La Clase Fuente\n",
"La clase Fuente debe abstraer el concepto de una fuente informativa como por ejemplo \"La Jornada\" o \"noticias MVS\". Una característica principal de las Fuentes es que generan Notas (ver ejercicio 1). \n",
"### 3.7.3 La Clase Editor\n",
"### 3.6.3 La Clase Editor\n",
"La clase Editor debe abstraer el concepto de una persona (o robot) que se encarga de recopilar las Notas de diversas Fuentes para un determinado tema (sección). Por ejemplo un Editor de la sección \"cultura\" debe ser capaz de identificar las notas que corresponden a este tema. También debe ser capaz de consultar las Fuentes y autores que proporcionan las mejores Notas para la sección que le corresponde, es decir, es experto en uno de los temas. \n",
"### 3.7.4 La Clase Editorial\n",
"### 3.6.4 La Clase Editorial\n",
"La clase Editorial debe abstraer el concepto del consejo editorial de un periódico. Es una clase muy importante para el proyecto ya que la Editorial decide cuáles notas deben aparecer en el día y determina el grado de relevancia de las notas del día para cada sección.Para ello, debe interactuar con los Reporteros para decidir las notas que deben incluirse, considerando los temas de interés y las valoraciones de los Reporteros."
]
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment