elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Método __init__ y clases de python-3.x
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Método __init__ y clases de python-3.x  (Leído 3,458 veces)
Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Método __init__ y clases de python-3.x
« en: 18 Noviembre 2019, 10:54 am »

Tengo una duda sobre este método... Y es... que hace realmente este método, me podríais poner un ejemplo de una clase utilizando este método y una clase sin este método para poder ver la diferencia...
Y otra cosa, si yo hago esto

Código
  1. class coche():
  2.    def __init__(self, rueda, pintura):
  3.         self.rueda = rueda
  4.         self.pintura = pintura
  5.    def imprimir(self):
  6.         self.rueda = input("que tipo de ruedas tienes > ")
  7.         self.pintura = input("color del coche > ")
  8.  
  9. COCHE = coche()
  10. COCHE.imprimir()
  11.  

Porque en la parte COCHE = coche() me pide los valores de rueda y pintura si ya lo defino en "def imprimir()", ¿no hay manera de que no me los pida?, es que hay veces que he tenido errores por el valor inicial que le doy

Gracias por responder!  ;D


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Método __init__ y clases de python-3.x
« Respuesta #1 en: 18 Noviembre 2019, 11:04 am »

sin init

Código
  1. class Coche():
  2.    def imprimir(self):
  3.         self.rueda = input("que tipo de ruedas tienes > ")
  4.         self.pintura = input("color del coche > ")
  5.         print("las rueadas son", self.rueda, "y la pintura es", self.pintura
  6.  
  7. objeto = Coche()
  8.  

con init
Código
  1. class Coche():
  2.    def __init__(self, kilometro_por_litro):
  3.         self.kpl = kilometro_por_litro
  4.    def imprimir(self):
  5.         self.litros = input("cuantos litros tienes? > ")
  6.         print("puedes rodar", self.kpl/self.litros, "kilometos mas"
  7.  
  8. objeto = Coche(21)
  9.  

el paso de parametros en init lo usas principalmente cuando son cosas que requieren saberse antes que nada pase


por buena practica las clases empiezan con mayusculas, no usas variables con mayusculas exclusivamente (usualmente se reservan para las constantes) y NO usas el mismo nombre en una clase y una variable, eso lleva a confusion...


« Última modificación: 18 Noviembre 2019, 11:07 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Jedahee

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Método __init__ y clases de python-3.x
« Respuesta #2 en: 18 Noviembre 2019, 19:26 pm »

sin init

Código
  1. class Coche():
  2.    def imprimir(self):
  3.         self.rueda = input("que tipo de ruedas tienes > ")
  4.         self.pintura = input("color del coche > ")
  5.         print("las rueadas son", self.rueda, "y la pintura es", self.pintura
  6.  
  7. objeto = Coche()
  8.  

con init
Código
  1. class Coche():
  2.    def __init__(self, kilometro_por_litro):
  3.         self.kpl = kilometro_por_litro
  4.    def imprimir(self):
  5.         self.litros = input("cuantos litros tienes? > ")
  6.         print("puedes rodar", self.kpl/self.litros, "kilometos mas"
  7.  
  8. objeto = Coche(21)
  9.  

el paso de parametros en init lo usas principalmente cuando son cosas que requieren saberse antes que nada pase


por buena practica las clases empiezan con mayusculas, no usas variables con mayusculas exclusivamente (usualmente se reservan para las constantes) y NO usas el mismo nombre en una clase y una variable, eso lleva a confusion...

Muchas gracias por responder!

Otra duda que me ha aparecido es... si uso el método "self" este se define en todo el documento, solo entre clases, o solo dentro los def de la clase donde lo defino?
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Método __init__ y clases de python-3.x
« Respuesta #3 en: 18 Noviembre 2019, 19:35 pm »

self es "yo mismo" basicamente, el self se extiende dentro de todo el objeto, pero nada mas

es decir, se vuelve una propiedad del objeto y puedes accederlo por ejemplo en el caso de la clase anterior

Código
  1. objeto = Coche()
  2.  
  3. objeto.imprimir()
  4.  
  5. # aqui la interaccion
  6.  
  7. print("el coche tiene ruedas:", objeto.rueda)

ojo usualmente para evitar conflictos y errores declaras las propiedades de antemano por ejemplo

Código
  1. class Coche():
  2.    rueda = ""
  3.    pintura = ""
  4.  
  5.    def imprimir(self):
  6.         self.rueda = input("que tipo de ruedas tienes > ")
  7.         self.pintura = input("color del coche > ")
  8.         print("las rueadas son", self.rueda, "y la pintura es", self.pintura
  9.  

no es tan buena idea declararlo "en caliente" porque si requieres la propiedad luego, puedes tener errores

en ese caso no requieren self porque estás declarandolo como parte del objeto directamente (dentro de los def si necesitas self, porque los def declaran variables solo dentro de su scope)
« Última modificación: 18 Noviembre 2019, 19:39 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines