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. # Blackbox
  33.  
  34.  
  35. from datetime import datetime
  36.  
  37.  
  38. class Persona:
  39. def __init__(self, nombre, apellidos, email, fecha_nacimiento):
  40. self._nombre = nombre
  41. self._apellidos = apellidos
  42. self._email = email
  43. self._fecha_nacimiento = fecha_nacimiento
  44.  
  45.  
  46. @property
  47. def nombre(self):
  48. return self._nombre
  49.  
  50.  
  51. @property
  52. def apellidos(self):
  53. return self._apellidos
  54.  
  55.  
  56. @property
  57. def email(self):
  58. return self._email
  59.  
  60.  
  61. @property
  62. def fecha_nacimiento(self):
  63. return self._fecha_nacimiento
  64.  
  65.  
  66. def __str__(self):
  67. return f"{self.nombre} {self.apellidos} - {self.email} - {self.fecha_nacimiento.strftime('%d/%m/%Y')}"
  68.  
  69.  
  70. class Empleado(Persona):
  71. def __init__(self, nombre, apellidos, email, fecha_nacimiento, empresa):
  72. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  73. self._empresa = empresa
  74.  
  75. @property
  76. def empresa(self):
  77. return self._empresa
  78.  
  79. def __str__(self):
  80. return f"{super().__str__()} - {self.empresa}"
  81.  
  82.  
  83. class Estudiante(Persona):
  84. def __init__(self, nombre, apellidos, email, fecha_nacimiento, institucion, nombre_grado, curso):
  85. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  86. self._institucion = institucion
  87. self._nombre_grado = nombre_grado
  88. self._curso = curso
  89.  
  90.  
  91. @property
  92. def institucion(self):
  93. return self._institucion
  94.  
  95. @property
  96. def nombre_grado(self):
  97. return self._nombre_grado
  98.  
  99. @property
  100. def curso(self):
  101. return self._curso
  102.  
  103. def __str__(self):
  104. return f"{super().__str__()} - {self.institucion} - {self.nombre_grado} - Curso {self.curso}"
  105.  
  106.  
  107. class PersonaRepo:
  108. def __init__(self):
  109. self._personas = []
  110.  
  111. @property
  112. def personas(self):
  113. return self._personas
  114.  
  115. def buscar(self, filtro):
  116. return [p for p in self._personas if filtro(p)]
  117.  
  118. def __str__(self):
  119. # Modificado self._persona por self._personas
  120. return "\n".join(str(p) for p in self._personas)
  121.  
  122.  
  123. def agregar_persona(self, persona):
  124. self._personas.append(persona)
  125.  
  126.  
  127. repo = PersonaRepo()
  128. p1 = Persona("Juan", "Pérez", "juan@example.com", datetime(1990, 1, 1))
  129. p2 = Empleado("María", "González", "maria@example.com", datetime(1992, 2, 2), "Empresa XYZ")
  130. p3 = Estudiante("Pedro", "Rodríguez", "pedro@example.com", datetime(1995, 3, 3), "Universidad ABC", "Ingeniería", 2)
  131.  
  132. repo.agregar_persona(p1)
  133. repo.agregar_persona(p2)
  134. repo.agregar_persona(p3)
  135.  
  136. print(repo)
  137.  
  138. # Buscar personas que tienen más de 25 años
  139. mayores_de_25 = repo.buscar(lambda p: (datetime.now() - p.fecha_nacimiento).days // 365 > 25)
  140. print("Mayores de 25 años:")
  141. for p in mayores_de_25:
  142. print(p)
  143.  
Success #stdin #stdout 0.04s 10088KB
stdin
Standard input is empty
stdout
Juan Pérez - juan@example.com - 01/01/1990
María González - maria@example.com - 02/02/1992 - Empresa XYZ
Pedro Rodríguez - pedro@example.com - 03/03/1995 - Universidad ABC - Ingeniería - Curso 2
Mayores de 25 años:
Juan Pérez - juan@example.com - 01/01/1990
María González - maria@example.com - 02/02/1992 - Empresa XYZ
Pedro Rodríguez - pedro@example.com - 03/03/1995 - Universidad ABC - Ingeniería - Curso 2