super()
isinstance()
issubclass()
¶class Calculadora: # clase padre
def __init__(self, numero):
self.n = numero # número de datos que intervienen en la operación
self.datos = [0 for i in range(numero)]
def ingresardato(self):
self.datos = [int(input('Ingresar dato ' + str(i+1) + ' = ')) for i in range(self.n)]
class OperacionesBasicas(Calculadora): # clase hija
def __init__(self): # sobrescribimos el método constructor
Calculadora.__init__(self, 2) # podríamos poner la función super() y quitar el self
def suma(self):
a,b, = self.datos
return a + b
def resta(self):
a,b, = self.datos
return a - b
class Raiz(Calculadora): # otra clase hija
def __init__(self): # sobrescribimos el método constructor
super().__init__(1) # aquí si trabajamos con la función super() y hemos quitado el self
def cuadrada(self):
a, = self.datos
return a**.5
caso1 = OperacionesBasicas() # instanciamos un objeto de la clase OperacionesBasicas que necesita 2 argumentos
caso2 = Raiz() # instanciamos un objeto de la clase Raiz que solo usa un argumento
caso1.ingresardato() # invocamos este método que nos pedirá dos datos por ser de la clase OpBasicas
Ingresar dato 1 = 2 Ingresar dato 2 = 3
caso1.suma() # invocamos el método suma y sumamos los dos datos
5
caso1.resta() # invocamos el método resta
-1
caso2.ingresardato() # invocamos este método que nos pedirá 1 dato por ser de la clase Raiz
Ingresar dato 1 = 9
caso2.cuadrada() # invocamos el método cuadrada que usa 1 dato y hace la raíz cuadrada
3.0
isinstance(objeto, clase)
¶Retorna True o False según que el objeto pertenezca o no a cierta clase.
isinstance(caso1, OperacionesBasicas)
True
isinstance(caso1, Calculadora)
True
isinstance(caso1, Raiz)
False
issubclass(Subclase, Clase)
¶Retorna True si la subclase hereda de la clase indicadas, en ese orden.
issubclass(Raiz, Calculadora) # True. Raiz si es subclase de Calculadora
True
issubclass(Raiz, OperacionesBasicas) # False. Raiz no es subclase de OperacionesBasicas
False