Skip to content

Commit 557d1e2

Browse files
authored
Merge pull request mouredev#7014 from mrodara/mrodara/main
feat: #9 - Python
2 parents 191b506 + 54c0a8e commit 557d1e2

File tree

2 files changed

+316
-0
lines changed

2 files changed

+316
-0
lines changed
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
###################################### HERENCIA ########################################
2+
'''
3+
La herencia es un mecanismo de la programación orientada a objetos que sirve para crear clases nuevas a partir de clases preexistentes. Se toman (heredan) atributos y métodos de las clases bases y se los modifica para modelar una nueva situación.
4+
5+
La clase desde la que se hereda se llama clase base y la que se construye a partir de ella es una clase derivada.
6+
7+
Si nuestra clase base es la clase punto que hemos visto antes, puedo crear una nueva clase de la siguiente manera:
8+
'''
9+
10+
from math import sqrt
11+
12+
class Punto():
13+
14+
def __init__(self, x: int = 0, y: int = 0) -> None:
15+
self.__x = x # Definición de atributo privado (encapsulación)
16+
self.__y = y
17+
18+
@property
19+
def x(self) -> int:
20+
print('Imprimiendo coordenada X:')
21+
return self.__x
22+
23+
@property
24+
def y(self) -> int:
25+
print('Imprimiendo coordenada y:')
26+
return self.__y
27+
28+
@x.setter
29+
def x(self, x: int = 0) -> None:
30+
print('Cambio x')
31+
self.__x = x
32+
33+
@y.setter
34+
def y(self, y: int = 0) -> None:
35+
print('Cambio y')
36+
self.__y = y
37+
38+
def mostrar(self) -> None:
39+
return str(self.__x) + ":" + str(self.__y)
40+
41+
def distancia(self, point) -> None:
42+
dx = self.__x - point.x
43+
dy = self.__y - point.y
44+
45+
return sqrt((dx*dy + dy*dy)** 0.5)
46+
47+
class Punto3D(Punto):
48+
49+
def __init__(self, x:int = 0, y:int = 0, z:int = 0):
50+
super().__init__(x, y) # Llamada al constructor de la clase base
51+
self.__z = z # Atributo propio de la clase derivada
52+
53+
@property
54+
def z(self) -> None:
55+
print('Imprimiendo coordenada Z:')
56+
return self.__z
57+
58+
@z.setter
59+
def z(self, z) -> None:
60+
print('Cambio coordenada Z')
61+
self.__z = z
62+
63+
# Sobreescritura de métdos
64+
def mostrar(self) -> None:
65+
return super().mostrar() + ":" + str(self.__z)
66+
67+
def distancia(self, npoint) -> None:
68+
'''
69+
Devuelve la distancia entre ambos puntos 3D
70+
'''
71+
72+
dx = self.__x - npoint.x
73+
dy = self.__y - npoint.y
74+
dz = self.__z - npoint.z
75+
76+
return (dx*dx + dy*dy + dz*dz) ** 0.5
77+
78+
79+
class Animal():
80+
81+
def __init__(self, name: str, age: int) -> None:
82+
self.__name = name
83+
self.__age = age
84+
85+
@property
86+
def name(self) -> str:
87+
return self.__name
88+
89+
@property
90+
def age(self) -> int:
91+
return self.__age
92+
93+
@name.setter
94+
def name(self, name: str) -> None:
95+
print('Cambiando nombre')
96+
self.__name = name
97+
98+
@age.setter
99+
def age(self, age: int) -> None:
100+
print('Cambiando nombre')
101+
self.__age = age
102+
103+
# EJERCICIO PRINCIPAL
104+
105+
class Dog(Animal):
106+
107+
def __init__(self, name: str, age: int, race: str) -> None:
108+
super().__init__(name, age)
109+
self.__race = race
110+
111+
@property
112+
def race(self) -> None:
113+
return self.__race
114+
115+
@race.setter
116+
def race(self, race: str) -> None:
117+
print('Estableciendo raza.')
118+
self.__race = race
119+
120+
def talk(self) -> None:
121+
print('Woof Woof!!!')
122+
123+
class Cat(Animal):
124+
125+
def __init__(self, name: str, age: int, race: str) -> None:
126+
super().__init__(name, age)
127+
self.__race = race
128+
129+
@property
130+
def race(self) -> None:
131+
return self.__race
132+
133+
@race.setter
134+
def race(self, race: str) -> None:
135+
print('Estableciendo raza.')
136+
self.__race = race
137+
138+
def talk(self) -> None:
139+
print('Miau Miau!!!')
140+
141+
142+
pet1 = Dog(name="Coco", age=5, race="Golden Retriever")
143+
pet2 = Cat(name="Perla", age=7, race="Romano")
144+
145+
print(pet1.name)
146+
print(pet1.age)
147+
print(pet1.talk())
148+
print(pet2.name)
149+
print(pet2.age)
150+
print(pet2.talk())
151+
152+
# FIN EJERCICIO PRINCIPAL
153+
154+
# DIFICULTAD EXTRA
155+
156+
class Employee():
157+
def __init__(self, id: str, name: str) -> None:
158+
self.__id = id
159+
self.__name = name
160+
161+
@property
162+
def id(self) -> str:
163+
return self.__id
164+
165+
@id.setter
166+
def id(self, id: str) -> None:
167+
self.__id = id
168+
169+
@property
170+
def name(self) -> str:
171+
return self.__name
172+
173+
@name.setter
174+
def name(self, name: str) -> None:
175+
self.__name = name
176+
177+
class Programmer(Employee):
178+
179+
def __init__(self, id, name, languages: list = []):
180+
super().__init__(id, name)
181+
self.__languages = languages
182+
183+
@property
184+
def languages(self) -> list:
185+
return self.__languages
186+
187+
@languages.setter
188+
def languages(self, languages: list) -> None:
189+
self.__languages = languages
190+
191+
def work(self) -> None:
192+
print('Coding...')
193+
194+
class ProyectManager(Employee):
195+
196+
def __init__(self, id, name, programmers: list = []):
197+
super().__init__(id, name)
198+
self.__programmers = programmers
199+
200+
@property
201+
def programmers(self) -> list:
202+
return self.__programmers
203+
204+
@programmers.setter
205+
def programmers(self, programmers: list) -> None:
206+
self.__programmers = programmers
207+
208+
def work(self) -> None:
209+
print('Managing projects...')
210+
211+
class Manager(Employee):
212+
213+
def __init__(self, id, name, employees: list = []):
214+
super().__init__(id, name)
215+
self.__employees = employees
216+
217+
@property
218+
def employees(self) -> list:
219+
return self.__employees
220+
221+
@employees.setter
222+
def employees(self, employees: list) -> None:
223+
self.__employees = employees
224+
225+
def work(self) -> None:
226+
print('Managing...')
227+
228+
229+
p1 = Programmer(id="1", name="Juan", languages=["Python", "Java"])
230+
p2 = Programmer(id="2", name="Maria", languages=["C++", "C#"])
231+
p3 = Programmer(id="3", name="Pedro", languages=["JavaScript", "PHP"])
232+
p4 = Programmer(id="4", name="Ana", languages=["Ruby", "Swift"])
233+
p5 = Programmer(id="5", name="Luis", languages=["Go", "Kotlin"])
234+
235+
pm1 = ProyectManager(id="6", name="Carlos", programmers=[p1, p2])
236+
pm2 = ProyectManager(id="7", name="Laura", programmers=[p3, p4])
237+
pm3 = ProyectManager(id="8", name="Sofia", programmers=[p5])
238+
239+
m1 = Manager(id="9", name="Javier", employees=[pm1, pm2, pm3])
240+
m1.work()
241+
pm1.work()
242+
p1.work()
243+
p2.work()
244+
p3.work()
245+
p4.work()
246+
p5.work()
247+
248+
# Listar todos los programdores asignados a un ProjectManager
249+
for p in pm1.programmers:
250+
print(p.name)
251+
252+
# FIN DIFICULTAD EXTRA
253+
254+
###################################### FIN HERENCIA ########################################
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#################### EXCEPCIONES EN PYTHON ############################
2+
3+
'''
4+
Una excepción o un error de ejecución se produce durante la ejecución del programa.
5+
Las excepciones se pueden manejar para que no termine el programa.
6+
'''
7+
8+
# Excepción de división por cero
9+
try:
10+
a = 10/0
11+
except ZeroDivisionError:
12+
print("No se puede dividir por cero")
13+
finally:
14+
print("Finalizó la ejecución")
15+
16+
my_list = [i for i in range(5)]
17+
18+
try:
19+
print(my_list[5]) # Genera un IndexError
20+
except IndexError:
21+
print(f"Índice fuera de rango, mostramos el último elemento de la lista: {my_list[-1]}")
22+
23+
# Definir una excepción propia
24+
'''
25+
Para crear un tipo de excepción personalizada en Python, podemos definir una nueva clase que herede
26+
de la clase base de excepciones.
27+
Esto permite generar errores específicos para ciertos casos en tu aplicación.
28+
'''
29+
class MyException(Exception):
30+
def __init__(self, message: str = "Error personalizado") -> None:
31+
super().__init__(message)
32+
33+
try:
34+
raise MyException("Este es un error personalizado")
35+
except MyException as e:
36+
print(f"Captura de la excepción: {e}")
37+
38+
#################### FIN EXCEPCIONES EN PYTHON ############################
39+
40+
#################### EXTRA ############################
41+
42+
def my_exception_managment(value1 : int = 0, value2 : int = 0, value3: tuple = (), boolvalue: bool = True) -> None:
43+
try:
44+
return value1 / value2
45+
except ZeroDivisionError:
46+
print("No se puede dividir por cero")
47+
48+
try:
49+
value2 + value3
50+
except TypeError:
51+
print("No se puede sumar un entero con un string")
52+
53+
try:
54+
print(value4)
55+
except NameError:
56+
print("La variable no está definida")# No se puede acceder a una variable no definida
57+
finally:
58+
print("Finalizó la ejecución")
59+
60+
my_exception_managment(10, 0, (1, 2, 3), True)
61+
62+
#################### FIN EXTRA ############################

0 commit comments

Comments
 (0)