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()