SoloCodigo

Programación Web y Scripting => Python => Mensaje iniciado por: cristiantorres en Miércoles 11 de Abril de 2012, 00:17

Título: Constructores en Python
Publicado por: cristiantorres en Miércoles 11 de Abril de 2012, 00:17
Soy programador de C# a un nivel intermedio, pero quiero aprender a programar en python también y recién empiezo a estudiar sobre este lenguaje y me parece interesante hasta me parece un poco mas facil que C#.
Estoy practicando pasando todos mis códigos de cuando empeze a programar en c# a python.
Pero aun no me quedan claros algunos conceptos de python, por ejemplo se que en python no existen los contructores y lo mas que se asemeja a esto es el metodo __init__() y aun no me queda claro como usarlo, por ejemplo quiero pasar este código de c# a python pero aun no lo e logrado ya que se usa el constructor con tipos de datos diferentes y nose como hacerlo en python.

Este es el codigo que quiero pasar a python si me pudieran mas o menos orientar les agradeceria muchisimo

Código: [Seleccionar]
using System;
class cons {
int a;
double b;
string c;

public cons(int a){
this.a=a;
Console.WriteLine("se recibió un entero con valor: "+a);
}

public  cons(double b){
this.b=b;
Console.WriteLine("se recibió un double con valor: "+b);
}

public  cons(string c){
this.c=c;
Console.WriteLine("se recibió un String con valor: "+c);
}

public  cons(){
Console.WriteLine("constructor vacío sin declaración de parámetros");
}
}


class ejercicio3{
public static void Main(){

cons ob = new cons(10);
cons ob1 = new cons(11.5);
cons ob2 = new cons("madrid");
cons ob3 = new cons();

}
}

Y otra duda que tengo en python es respecto al método main en c# es necesario definir este metodo para que los programas se ejecuten pero en python veo que no es necesario declarlo y tambien veo que se utiliza de manera diferente.
Título: Re:Constructores en Python
Publicado por: Demenus en Miércoles 11 de Abril de 2012, 00:58
Bueno en Python si es cierto que no existe la sobrecarga y lo que se usa como solución a ello son los parámetros por defecto

Código: Python
  1. class Cons:
  2.     def __init__(self, a=None, b=None, c=None):
  3.         self.a, self.b, self.c = a, b, c
  4.         if a:
  5.             print("Se recibió un entero con valor",a)
  6.         elif b:
  7.             print("Se recibió un double con valor",b)
  8.         elif c:
  9.             print("Se recibió una string con valor",c)
  10.         else:
  11.             print("Constructor sin parámetros")
  12.  

O también podrías usar la función isinstance que viene incluida en la biblioteca standard de python

Código: Python
  1. class Cons:
  2.     def __init__(self, param):
  3.         self.param = param
  4.         if isinstance(param, int):
  5.             print("Se recibió un entero con valor",param)
  6.         elif isinstance(param, float):
  7.             print("Se recibió un double con valor",param)
  8.         elif isinstance(param, str):
  9.             print("Se recibió una string con valor",param)
  10.         else:
  11.             print("Constructor sin parámetros")
  12.  

La verdad es que para estas cosas de la sobrecarga Python no se ve tan bonito como para otras jajaja
Espero haberte ayudado
Título: Re:Constructores en Python
Publicado por: cristiantorres en Miércoles 11 de Abril de 2012, 02:14
Bueno en Python si es cierto que no existe la sobrecarga y lo que se usa como solución a ello son los parámetros por defecto

Código: Python
  1. class Cons:
  2.     def __init__(self, a=None, b=None, c=None):
  3.         self.a, self.b, self.c = a, b, c
  4.         if a:
  5.             print(" ",a)
  6.         elif b:
  7.             print("Se recibió un double con valor",b)
  8.         elif c:
  9.             print("Se recibió una string con valor",c)
  10.         else:
  11.             print("Constructor sin parámetros")
  12.  

O también podrías usar la función isinstance que viene incluida en la biblioteca standard de python

Código: Python
  1. class Cons:
  2.     def __init__(self, param):
  3.         self.param = param
  4.         if isinstance(param, int):
  5.             print("Se recibió un entero con valor",param)
  6.         elif isinstance(param, float):
  7.             print("Se recibió un double con valor",param)
  8.         elif isinstance(param, str):
  9.             print("Se recibió una string con valor",param)
  10.         else:
  11.             print("Constructor sin parámetros")
  12.  

La verdad es que para estas cosas de la sobrecarga Python no se ve tan bonito como para otras jajaja
Espero haberte ayudado

Gracias por responder
y si tienes razón por lo que e visto hasta ahora python en esto de sobrecargas se queda un poco corto pero = lo seguiré estudiando