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. # AIChat
  33.  
  34.  
  35. class Persona:
  36. # Modificado: init -> __init__
  37. def __init__(self, nombre, apellidos, email, fecha_nacimiento):
  38. self._nombre = nombre
  39. self._apellidos = apellidos
  40. self._email = email
  41. self._fecha_nacimiento = fecha_nacimiento
  42.  
  43. @property
  44. def nombre(self):
  45. return self._nombre
  46.  
  47. @property
  48. def apellidos(self):
  49. return self._apellidos
  50.  
  51. @property
  52. def email(self):
  53. return self._email
  54.  
  55. @property
  56. def fecha_nacimiento(self):
  57. return self._fecha_nacimiento
  58.  
  59. def __str__(self):
  60. return f"{self._nombre} {self._apellidos}, {self._email}, {self._fecha_nacimiento}"
  61.  
  62.  
  63. class Empleado(Persona):
  64. # Modificado: init -> __init__
  65. def __init__(self, nombre, apellidos, email, fecha_nacimiento, empresa):
  66. # Modificado: init -> __init__
  67. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  68. self._empresa = empresa
  69.  
  70. @property
  71. def empresa(self):
  72. return self._empresa
  73.  
  74. def __str__(self):
  75. return f"{self._nombre} {self._apellidos}, {self._email}, {self._fecha_nacimiento}, {self._empresa}"
  76.  
  77.  
  78.  
  79. class Estudiante(Persona):
  80. # Modificado: init -> __init__
  81. def __init__(self, nombre, apellidos, email, fecha_nacimiento, institucion, grado, curso):
  82. # Modificado: init -> __init__
  83. super().__init__(nombre, apellidos, email, fecha_nacimiento)
  84. self._institucion = institucion
  85. self._grado = grado
  86. self._curso = curso
  87.  
  88. @property
  89. def institucion(self):
  90. return self._institucion
  91.  
  92. @property
  93. def grado(self):
  94. return self._grado
  95.  
  96. @property
  97. def curso(self):
  98. return self._curso
  99.  
  100. def __str__(self):
  101. return f"{self._nombre} {self._apellidos}, {self._email}, {self._fecha_nacimiento}, {self._institucion}, {self._grado}, {self._curso}"
  102.  
  103.  
  104. class PersonaRepo:
  105. # Modificado: init -> __init__
  106. def __init__(self):
  107. self._personas = []
  108.  
  109. @property
  110. def personas(self):
  111. return self._personas
  112.  
  113. def agregar_persona(self, persona):
  114. self._personas.append(persona)
  115.  
  116. def __str__(self):
  117. personas_info = ""
  118. for persona in self._personas:
  119. personas_info += str(persona) + "\n"
  120. return personas_info
  121.  
  122. def buscar(self, condicion):
  123. return list(filter(condicion, self._personas))
  124.  
  125.  
  126. repo = PersonaRepo()
  127. empleado1 = Empleado("Juan", "Perez", "juan@gmail.com", "01-01-1990", "Empresa X")
  128. estudiante1 = Estudiante("Maria", "Lopez", "maria@gmail.com", "15-05-1995", "Universidad Y", "Informática", 2)
  129.  
  130. repo.agregar_persona(empleado1)
  131. repo.agregar_persona(estudiante1)
  132.  
  133. print(repo) # Imprime la información de todas las personas en el repositorio
  134. # Modificado: es necesario un join.
  135. print(str.join(", ", [str(x) for x in repo.buscar(lambda persona: persona.nombre.startswith("J"))])) # Ejemplo de búsqueda usando una lambda
  136.  
Success #stdin #stdout 0.03s 9584KB
stdin
Standard input is empty
stdout
Juan Perez, juan@gmail.com, 01-01-1990, Empresa X
Maria Lopez, maria@gmail.com, 15-05-1995, Universidad Y, Informática, 2

Juan Perez, juan@gmail.com, 01-01-1990, Empresa X