Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: PUAROT en 19 Febrero 2017, 12:40 pm



Título: Clase con atributos e instancias o if, elif, elif....
Publicado por: PUAROT en 19 Febrero 2017, 12:40 pm
Estoy empezando un nuevo script en Python3,5 y como soy novato, me surgen dudas sobre como es mejor hacer las cosas.
Hay muchas formas de llegar a un mismo resultado en Python, pero me gustaría saber como es mas "adecuado" hacerlo.

Por ejemplo, estoy empezando un script el cual me averigüe el valor de una resistencia  a partir de sus colores (ya se que habrá miles hechos) y se me ocurren varias formas de hacerlo.

La primera es crear una clase resistencia
Código
  1. class Resistencia():
  2.    def __init__(self,color1=None,color2=None,color3=None,color4=None,color5=None,color6=None):
  3.        self.color1 = color1
  4.        self.color2 = color2
  5.        self.color3 = color3
  6.        self.color4 = color4
  7.        self.color5 = color5
  8.        self.color6 = color6

Con un método del tipo :
Código
  1. def valor_color(self,color):
  2.        if color == "negro":
  3.            valor = 0
  4.            multiplicador = 1
  5.            tolerancia = None
  6.        elif color == "marron":
  7.            valor = 1
  8.            multiplicador = 10
  9.            tolerancia = 1
  10.        elif color == "rojo":
  11.            valor = 2
  12.            multiplicador = 10
  13.            tolerancia = 2
y un método que calcule el valor total en base a los colores.....


Por otra parte se me ocurre crear una clase color con sus atributos para luego utilizarlos del tipo :
Código
  1. class Color():
  2.    def ___init__(self, valor, multiplicador, tolerancia):
  3.        self.valor = valor
  4.        self.multiplicador = multiplicador
  5.        self.tolerancia = tolerancia

y después instanciar varios objetos color con sus valores
Código
  1. negro = Color()
  2. negro.valor = 0
  3. negro.multiplicador = 1
  4. negro.tolerancia = None
  5. marron = Color()
  6. marron.valor = 1
  7. marron.multiplicador = 10
  8. marron.tolerancia = None



Que opináis  ?  Cual sería mejor forma ? alguna otra sugerencia  ?

Espero haberme explicado


Título: Re: Clase con atributos e instancias o if, elif, elif....
Publicado por: tincopasan en 19 Febrero 2017, 17:53 pm
más allá de las clases, me gusta trabajar con diccionarios para guardar los datos tipo:
Código
  1. resistencias={"negro":{"valor":0,"multiplicador":0,"tolerancia":"None"},
  2.                     "marron":{"valor":1,"multiplicador":10,"tolerancia":1}}
  3.  
  4. def valores_color(buscado):
  5.    color= resistencias[buscado]
  6.    valor=color["valor"]
  7.    tolerancia= color["tolerancia"]
  8.    print(color)
  9.    print(valor)
  10.    print(tolerancia)
  11.  
  12. valores_color("negro")    
  13.  


Título: Re: Clase con atributos e instancias o if, elif, elif....
Publicado por: PUAROT en 20 Febrero 2017, 11:49 am
Pues mira yo había pensado también en listas dentro de listas, pero no se me había ocurrido diccionario dentro de diccionario.

Que ventajas tiene con respecto a lista dentro de lista  ?


Título: Re: Clase con atributos e instancias o if, elif, elif....
Publicado por: tincopasan en 20 Febrero 2017, 13:23 pm
me parece más facil acceder a un valor por su clave que por su índice, o sea prefiero poner:
diccionario["negro"]
que
lista[0]
al fin y al cabo llegará a lo mismo, pero no hay que saber el lugar que ocupa


Título: Re: Clase con atributos e instancias o if, elif, elif....
Publicado por: PUAROT en 21 Febrero 2017, 00:26 am
Pues si, es verdad :-)

lo mismo lo hago con diccionario , pero creo que investigaré también las clases y atributos, por el hecho de poder reutilizar código en un futuro.