fork download
  1. """
  2. Necesito código Python para una clase que
  3. contenga el nombre, apellidos. email y fecha de nacimiento
  4. de una persona. Toda esta información será accesible
  5. a través de propiedades de solo lectura.
  6. Un método str convertirá la información
  7. en cadena de caracteres.
  8. Además, la clase Empleado derivada de persona
  9. contiene la información de la empresa
  10. para la que trabaja,
  11. lo publica como propiedad de solo lectura,
  12. y también provee de un método str que convierte
  13. toda la información a cadena de caracteres.
  14. La clase estudiante derivada de persona contiene
  15. la institución, el nombre del grado y
  16. el número de curso (1 a 4).
  17. Toda esta información también se publica
  18. como propiedades de solo lectura y también ofrece
  19. un método str que convierte toda la información
  20. a cadena de caracteres.
  21. Finalmente, la clase PersonaRepo contiene
  22. una lista de personas, un método str
  23. que devuelve toda la información de
  24. todas las personas (una por línea),
  25. y una propiedad de solo lectura personas
  26. que devuelve una lista de personas.
  27. Además, el método busca admite una lambda
  28. que permite ejecutar un filtrado
  29. de las personas almacenadas.
  30. """
  31.  
  32. # Gemini
  33.  
  34.  
  35. class Persona:
  36. """
  37. Clase que representa a una persona.
  38.  
  39. Atributos:
  40. nombre: Nombre de la persona (propiedad de solo lectura).
  41. apellidos: Apellidos de la persona (propiedad de solo lectura).
  42. email: Correo electrónico de la persona (propiedad de solo lectura).
  43. fecha_nacimiento: Fecha de nacimiento de la persona (propiedad de solo lectura).
  44. """
  45.  
  46. def __init__(self, nombre, apellidos, email, fecha_nacimiento):
  47. """
  48. Constructor de la clase Persona.
  49.  
  50. Parámetros:
  51. nombre: Nombre de la persona.
  52. apellidos: Apellidos de la persona.
  53. email: Correo electrónico de la persona.
  54. fecha_nacimiento: Fecha de nacimiento de la persona (formato dd/mm/aaaa).
  55. """
  56. self._nombre = nombre
  57. self._apellidos = apellidos
  58. self._email = email
  59. self._fecha_nacimiento = fecha_nacimiento
  60.  
  61. @property
  62. def nombre(self):
  63. """
  64. Propiedad de solo lectura para el nombre de la persona.
  65. """
  66. return self._nombre
  67.  
  68. @property
  69. def apellidos(self):
  70. """
  71. Propiedad de solo lectura para los apellidos de la persona.
  72. """
  73. return self._apellidos
  74.  
  75. @property
  76. def email(self):
  77. """
  78. Propiedad de solo lectura para el correo electrónico de la persona.
  79. """
  80. return self._email
  81.  
  82. @property
  83. def fecha_nacimiento(self):
  84. """
  85. Propiedad de solo lectura para la fecha de nacimiento de la persona.
  86. """
  87. return self._fecha_nacimiento
  88.  
  89. def __str__(self):
  90. """
  91. Método str que devuelve una cadena de caracteres con la información de la persona.
  92. """
  93. return f"Nombre: {self.nombre} {self.apellidos}\nEmail: {self.email}\nFecha de nacimiento: {self.fecha_nacimiento}"
  94.  
  95.  
  96. ### Clase Empleado
  97.  
  98. class Empleado(Persona):
  99. """
  100. Clase que representa a un empleado.
  101.  
  102. Atributos:
  103. empresa: Nombre de la empresa en la que trabaja el empleado (propiedad de solo lectura).
  104. """
  105.  
  106. def __init__(self, nombre, apellidos, email, fecha_nacimiento, empresa):
  107. """
  108. Constructor de la clase Empleado.
  109.  
  110. Parámetros:
  111. nombre: Nombre del empleado.
  112. apellidos: Apellidos del empleado.
  113. email: Correo electrónico del empleado.
  114. fecha_nacimiento: Fecha de nacimiento del empleado (formato dd/mm/aaaa).
  115. empresa: Nombre de la empresa en la que trabaja el empleado.
  116. """
  117. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  118. self._empresa = empresa
  119.  
  120. @property
  121. def empresa(self):
  122. """
  123. Propiedad de solo lectura para el nombre de la empresa en la que trabaja el empleado.
  124. """
  125. return self._empresa
  126.  
  127. def __str__(self):
  128. """
  129. Método str que devuelve una cadena de caracteres con la información del empleado.
  130. """
  131. return f"{super().__str__()}\nEmpresa: {self.empresa}"
  132.  
  133.  
  134. class Estudiante(Persona):
  135. """
  136. Clase que representa a un estudiante.
  137.  
  138. Atributos:
  139. institucion: Nombre de la institución en la que estudia el estudiante (propiedad de solo lectura).
  140. grado: Nombre del grado que estudia el estudiante (propiedad de solo lectura).
  141. curso: Número de curso del estudiante (1 a 4) (propiedad de solo lectura).
  142. """
  143.  
  144. def __init__(self, nombre, apellidos, email, fecha_nacimiento, institucion, grado, curso):
  145. """
  146. Constructor de la clase Estudiante.
  147.  
  148. Parámetros:
  149. nombre: Nombre del estudiante.
  150. apellidos: Apellidos del estudiante.
  151. email: Correo electrónico del estudiante.
  152. fecha_nacimiento: Fecha de nacimiento del estudiante (formato dd/mm/aaaa).
  153. institucion: Nombre de la institución en la que estudia el estudiante.
  154. grado: Nombre del grado que estudia el estudiante.
  155. curso: Número de curso del estudiante (1 a 4).
  156. """
  157. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  158. self._institucion = institucion
  159. self._grado = grado
  160. self._curso = curso
  161.  
  162. @property
  163. def institucion(self):
  164. """
  165. Propiedad de solo lectura para el nombre de la institución en la que estudia el estudiante.
  166. """
  167. return self._institucion
  168.  
  169. @property
  170. def grado(self):
  171. """
  172. Propiedad de solo lectura para el nombre del grado que estudia el estudiante.
  173. """
  174. return self._grado
  175.  
  176. @property
  177. def curso(self):
  178. """
  179. Propiedad de solo lectura para el número de curso del estudiante.
  180. """
  181. return self._curso
  182.  
  183. def __str__(self):
  184. """
  185. Método str que devuelve una cadena de caracteres con la información del estudiante.
  186. """
  187. return f"{super().__str__()}\nInstitución: {self.institucion}\nGrado: {self.grado}\nCurso: {self.curso}"
  188.  
  189.  
  190. class PersonaRepo:
  191. """
  192. Clase que representa un repositorio de personas.
  193.  
  194. Atributos:
  195. personas: Lista de personas almacenadas en el repositorio (propiedad de solo lectura).
  196. """
  197.  
  198. def __init__(self):
  199. """
  200. Constructor de la clase PersonaRepo.
  201. """
  202. self._personas = []
  203.  
  204. @property
  205. def personas(self):
  206. """
  207. Propiedad de solo lectura para la lista de personas almacenadas en el repositorio.
  208. """
  209. return self._personas
  210.  
  211. def agregar_persona(self, persona):
  212. """
  213. Método para agregar una persona al repositorio.
  214.  
  215. Parámetros:
  216. persona: Objeto de tipo Persona que se desea agregar al repositorio.
  217. """
  218. self._personas.append(persona)
  219.  
  220. def buscar(self, filtro=None):
  221. """
  222. Método para buscar personas en el repositorio.
  223.  
  224. Parámetros:
  225. filtro: Función lambda que define el criterio de filtrado. Si no se especifica, se devuelven todas las personas.
  226.  
  227. Retorno:
  228. Lista de personas que cumplen con el criterio de filtrado.
  229. """
  230. if filtro is None:
  231. return self._personas
  232.  
  233. personas_filtradas = []
  234. for persona in self._personas:
  235. if filtro(persona):
  236. personas_filtradas.append(persona)
  237.  
  238. return personas_filtradas
  239.  
  240. def __str__(self):
  241. """
  242. Método str que devuelve una cadena de caracteres con la información de todas las personas almacenadas en el repositorio.
  243. """
  244. informacion_personas = ""
  245. for persona in self._personas:
  246. informacion_personas += f"{persona}\n\n"
  247.  
  248. return informacion_personas[:-2] # Elimina los dos últimos saltos de línea
  249.  
  250.  
  251. ### Ejemplo de uso
  252.  
  253. # Crear un repositorio de personas
  254. repositorio_personas = PersonaRepo()
  255.  
  256. # Crear personas
  257. persona1 = Persona("Juan", "Pérez", "juan.perez@email.com", "01/01/1980")
  258. persona2 = Empleado("María", "Gómez", "maria.gomez@email.com", "02/02/1990", "Google")
  259. persona3 = Estudiante("Ana", "López", "ana.lopez@email.com", "03/03/2000", "Universidad de Ourense", "Ingeniería Informática", 2)
  260.  
  261. # Agregar personas al repositorio
  262. repositorio_personas.agregar_persona(persona1)
  263. repositorio_personas.agregar_persona(persona2)
  264. repositorio_personas.agregar_persona(persona3)
  265.  
  266. # Mostrar la información de todas las personas
  267. print(repositorio_personas)
  268.  
  269. # Buscar personas mayores de 30 años
  270. personas_mayores_30 = repositorio_personas.buscar(lambda persona: persona.fecha_nacimiento < "01/01/1994")
  271.  
  272. # Mostrar la información de las personas mayores de 30 años
  273. print("\nPersonas mayores de 30 años:")
  274. for persona in personas_mayores_30:
  275. print(persona)
  276.  
Success #stdin #stdout 0.04s 9580KB
stdin
Standard input is empty
stdout
Nombre: Juan Pérez
Email: juan.perez@email.com
Fecha de nacimiento: 01/01/1980

Nombre: María Gómez
Email: maria.gomez@email.com
Fecha de nacimiento: 02/02/1990
Empresa: Google

Nombre: Ana López
Email: ana.lopez@email.com
Fecha de nacimiento: 03/03/2000
Institución: Universidad de Ourense
Grado: Ingeniería Informática
Curso: 2

Personas mayores de 30 años:
Nombre: Juan Pérez
Email: juan.perez@email.com
Fecha de nacimiento: 01/01/1980