# Una clase base genérica proporciona getters para todos los atributos
# de las clases derivadas.


class Generica:
    Prefijo_Atributos = "__"
    
    def __getattr__(self, item_name):
        if item_name.startswith("get_"):
            attr_name = Generica.Prefijo_Atributos + item_name[len(Generica.Prefijo_Atributos):].lower()
            exists = True
            
            try:
                attr = self.__dict__[attr_name]
            except KeyError:
                exists = False

            if (exists
            and not callable(attr)):
                return lambda: attr


class Persona(Generica):
    def __init__(self, nombre, email, edad):
        self.__dict__[Generica.Prefijo_Atributos + "nombre"] = nombre
        self.__dict__[Generica.Prefijo_Atributos + "email"] = email
        self.__dict__[Generica.Prefijo_Atributos + "edad"] = edad
        
    def __str__(self):
        return (self.get_nombre() + " ("
                + str(self.get_edad()) + "): " + self.get_email())
  
  
if __name__ == "__main__":
    p = Persona("Baltasar", "jbgarcia@uvigo.es", 18)
    print("Nombre:", p.get_nombre())
    print("Email:", p.get_email())
    print("Edad:", p.get_edad())
    print(p)
