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. # Copilot
  33.  
  34.  
  35. class Persona:
  36. def __init__(self, nombre, apellidos, email, fecha_nacimiento):
  37. self.__nombre = nombre
  38. self.__apellidos = apellidos
  39. self.__email = email
  40. self.__fecha_nacimiento = fecha_nacimiento
  41.  
  42. @property
  43. def nombre(self):
  44. return self.__nombre
  45.  
  46. @property
  47. def apellidos(self):
  48. return self.__apellidos
  49.  
  50. @property
  51. def email(self):
  52. return self.__email
  53.  
  54. @property
  55. def fecha_nacimiento(self):
  56. return self.__fecha_nacimiento
  57.  
  58. def __str__(self):
  59. return f'{self.nombre} {self.apellidos}, {self.email}, {self.fecha_nacimiento}'
  60.  
  61.  
  62. class Empleado(Persona):
  63. def __init__(self, nombre, apellidos, email, fecha_nacimiento, empresa):
  64. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  65. self.__empresa = empresa
  66.  
  67. @property
  68. def empresa(self):
  69. return self.__empresa
  70.  
  71. def __str__(self):
  72. return super().__str__() + f', {self.empresa}'
  73.  
  74.  
  75. class Estudiante(Persona):
  76. def __init__(self, nombre, apellidos, email, fecha_nacimiento, institucion, grado, curso):
  77. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  78. self.__institucion = institucion
  79. self.__grado = grado
  80. self.__curso = curso
  81.  
  82. @property
  83. def institucion(self):
  84. return self.__institucion
  85.  
  86. @property
  87. def grado(self):
  88. return self.__grado
  89.  
  90. @property
  91. def curso(self):
  92. return self.__curso
  93.  
  94. def __str__(self):
  95. return super().__str__() + f', {self.institucion}, {self.grado}, {self.curso}'
  96.  
  97.  
  98. class PersonaRepo:
  99. def __init__(self):
  100. self.__personas = []
  101.  
  102. @property
  103. def personas(self):
  104. return self.__personas
  105.  
  106. def agregar_persona(self, persona):
  107. self.__personas.append(persona)
  108.  
  109. def buscar(self, funcion):
  110. return list(filter(funcion, self.__personas))
  111.  
  112. def __str__(self):
  113. return '\n'.join(str(persona) for persona in self.__personas)
  114.  
  115.  
  116. ### Ejemplo de uso (tomado de Gemini)
  117.  
  118. # Crear un repositorio de personas
  119. repositorio_personas = PersonaRepo()
  120.  
  121. # Crear personas
  122. persona1 = Persona("Juan", "Pérez", "juan.perez@email.com", "01/01/1980")
  123. persona2 = Empleado("María", "Gómez", "maria.gomez@email.com", "02/02/1990", "Google")
  124. persona3 = Estudiante("Ana", "López", "ana.lopez@email.com", "03/03/2000", "Universidad de Ourense", "Ingeniería Informática", 2)
  125.  
  126. # Agregar personas al repositorio
  127. repositorio_personas.agregar_persona(persona1)
  128. repositorio_personas.agregar_persona(persona2)
  129. repositorio_personas.agregar_persona(persona3)
  130.  
  131. # Mostrar la información de todas las personas
  132. print(repositorio_personas)
  133.  
  134. # Buscar personas mayores de 30 años
  135. personas_mayores_30 = repositorio_personas.buscar(lambda persona: persona.fecha_nacimiento < "01/01/1994")
  136.  
  137. # Mostrar la información de las personas mayores de 30 años
  138. print("\nPersonas mayores de 30 años:")
  139. for persona in personas_mayores_30:
  140. print(persona)
  141.  
Success #stdin #stdout 0.05s 9576KB
stdin
Standard input is empty
stdout
Juan Pérez, juan.perez@email.com, 01/01/1980
María Gómez, maria.gomez@email.com, 02/02/1990, Google
Ana López, ana.lopez@email.com, 03/03/2000, Universidad de Ourense, Ingeniería Informática, 2

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