fork download
  1. # Una clase base genérica proporciona getters para todos los atributos
  2. # de las clases derivadas.
  3.  
  4.  
  5. class Generica:
  6. Prefijo_Atributos = "__"
  7.  
  8. def __getattr__(self, item_name):
  9. if item_name.startswith("get_"):
  10. attr_name = Generica.Prefijo_Atributos + item_name[len(Generica.Prefijo_Atributos):].lower()
  11. exists = True
  12.  
  13. try:
  14. attr = self.__dict__[attr_name]
  15. except KeyError:
  16. exists = False
  17.  
  18. if (exists
  19. and not callable(attr)):
  20. return lambda: attr
  21.  
  22.  
  23. class Persona(Generica):
  24. def __init__(self, nombre, email, edad):
  25. self.__dict__[Generica.Prefijo_Atributos + "nombre"] = nombre
  26. self.__dict__[Generica.Prefijo_Atributos + "email"] = email
  27. self.__dict__[Generica.Prefijo_Atributos + "edad"] = edad
  28.  
  29. def __str__(self):
  30. return (self.get_nombre() + " ("
  31. + str(self.get_edad()) + "): " + self.get_email())
  32.  
  33.  
  34. if __name__ == "__main__":
  35. p = Persona("Baltasar", "jbgarcia@uvigo.es", 18)
  36. print("Nombre:", p.get_nombre())
  37. print("Email:", p.get_email())
  38. print("Edad:", p.get_edad())
  39. print(p)
  40.  
Runtime error #stdin #stdout #stderr 0.04s 9392KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 36, in <module>
TypeError: 'NoneType' object is not callable