El método __init__ es un método especial de una clase en Python. El objetivo fundamental del método __init__ es inicializar los atributos del objeto que creamos.
Básicamente el método __init__ remplaza al método inicializar que habíamos hecho en el concepto anterior.
Las ventajas de implementar el método __init__ en lugar del método inicializar son:
Otras características del método __init__ son:
Veamos la sintaxis del constructor:
def __init__([parámetros]): [algoritmo]
Debemos definir un método llamado __init__ (es decir utilizamos dos caracteres de subrayado, la palabra init y seguidamente otros dos caracteres de subrayado).
Confeccionar una clase que represente un empleado. Definir como atributos su nombre y su sueldo. En el método __init__ cargar los atributos por teclado y luego en otro método imprimir sus datos y por último uno que imprima un mensaje si debe pagar impuestos (si el sueldo supera a 3000)
class Empleado: def __init__(self): self.nombre=input("Ingrese el nombre del empleado:") self.sueldo=float(input("Ingrese el sueldo:")) def imprimir(self): print("Nombre:",self.nombre) print("Sueldo:",self.sueldo) def paga_impuestos(self): if self.sueldo>3000: print("Debe pagar impuestos") else: print("No paga impuestos") # bloque principal empleado1=Empleado() empleado1.imprimir() empleado1.paga_impuestos()
Definimos el método __init__ donde cargamos por teclado el nombre del empleado y su sueldo:
def __init__(self): self.nombre=input("Ingrese el nombre del empleado:") self.sueldo=float(input("Ingrese el sueldo:"))
Este método se ejecuta inmediatamente luego que se crea un objeto de la clase Empleado:
empleado1=Empleado()
Como vemos no llamamos directamente al método __init__ sino que se llama automáticamente.
Los otros dos métodos tienen por objeto mostrar los datos del empleado y mostrar una leyenda si paga impuestos o no:
def imprimir(self): print("Nombre:",self.nombre) print("Sueldo:",self.sueldo) def paga_impuestos(self): if self.sueldo>3000: print("Debe pagar impuestos") else: print("No paga impuestos")
Desde el bloque principal donde creamos un objeto de la clase Empleado debemos llamar explícitamente a estos dos métodos:
empleado1.imprimir() empleado1.paga_impuestos()
Desarrollar una clase que represente un punto en el plano y tenga los siguientes métodos: inicializar los valores de x e y que llegan como parámetros, imprimir en que cuadrante se encuentra dicho punto (concepto matemático, primer cuadrante si x e y son positivas, si x<0 e y>0 segundo cuadrante, etc.)
class Punto: def __init__(self,x,y): self.x=x self.y=y def imprimir(self): print("Coordenada del punto") print("(",self.x,",",self.y,")") def imprimir_cuadrante(self): if self.x>0 and self.y>0: print("Primer cuadrange") else: if self.x<0 and self.y>0: print("Segundo cuadrante") else: if self.x<0 and self.y<0: print("Tercer cuadrante") else: if self.x>0 and self.y<0: print("Cuarto cuadrante") # bloque principal punto1=Punto(10,-2) punto1.imprimir() punto1.imprimir_cuadrante()
En este problema el método __init__ aparte del parámetro self que siempre va tenemos otros dos parámetros:
def __init__(self,x,y): self.x=x self.y=y
Desde el bloque principal donde creamos un objeto de la clase Punto pasamos los datos a los parámetros:
punto1=Punto(10,-2)
Recordemos que pasamos dos parámetros aunque el método __init__ recibe 3. El parámetro self recibe la referencia de la variable punto1 (es decir el objeto propiamente dicho)
ejercicio192.py class Cuadrado: def __init__(self,lado): self.lado=lado def mostrar_perimetro(self): per=self.lado*4 print("El perimetro del cuadrado es:",per) def mostrar_superficie(self): sup=self.lado*self.lado print("La superficie del cuadrado es:",sup) # bloque principal cuadrado1=Cuadrado(12) cuadrado1.mostrar_perimetro() cuadrado1.mostrar_superficie() ejercicio193.py class Operaciones: def __init__(self): self.valor1=int(input("Ingrese primer valor:")) self.valor2=int(input("Ingrese segundo valor:")) def sumar(self): su=self.valor1+self.valor2 print("La suma es",su) def restar(self): re=self.valor1-self.valor2 print("La resta es",re) def multiplicar(self): pro=self.valor1*self.valor2 print("El producto es",pro) def division(self): divi=self.valor1/self.valor2 print("La division es",divi) # bloque principal operacion1=Operaciones() operacion1.sumar() operacion1.restar() operacion1.multiplicar() operacion1.division()