Python - duda con POO Python

   
Vista:

duda con POO Python

Publicado por pablo (2 intervenciones) el 13/12/2014 15:20:24
Hola amigos, estoy estudiando la POO en Python. No tengo todavía mucha destreza en el tema. Tengo aquí un ejemplo bastante básico y quería hacer una pregunta concreta.
Como se ve en el código de abajo, tengo una clase (Coche) con 2 métodos(gasto y potencia). El programa me funciona perfectamente si solamente hago un objeto, pero mi intencion es hacer varios como escribo en los 2 ultimos párrafos . Básicamente hago 10 objetos cuyos parámetros color, gasolina y cilindrada se escojan aleatoriamente de entre los valores descritos en las 3 listas al inicio del programa.

Mi duda es: Cómo puedo definir mis 10 objetos sin tener que escribirlos uno a uno? lo he intentado creandome una lista de objetos, pero me da error. Hay alguien que sepa como lo puedo hacer?




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import random
 
 
COLOR = ["blanco", "verde", "negro", "rojo", "azul", "blanco"]
GASOLINA = [1, 2, 3, 4, 5, 6, 7, 8, 9]
CILINDRADA = [10, 20, 30, 40, 50, 60, 70, 80, 90]
 
 
class Coche:
 
    def __init__(self, gasolina, cilindrada, color):
        self.gasolina = gasolina
        self.cilindrada = cilindrada
        self.color = color
 
 
    def gasto(self):
        if self.gasolina > 5:
            print "Coche", self.color, "gasta mucho"
        else:
            print "Coche", self.color, "gasta poco"
 
    def potencia(self):
        if self.cilindrada > 50:
            print "Coche", self.color, "es potente"
        else:
            print "Coche", self.color, "no es potente"
 
 
 
lista=[]
for i in range(10):
    i = [random.choice(GASOLINA), random.choice(CILINDRADA), random.choice(COLOR)]
    lista.append(i)
 
for k in range(10):
    my_coche = Coche(lista[k])
    my_coche.gasto()
    my_coche.potencia()

Si sólo quiero hacer un objeto funciona sin problemas, para ello haría algo como:

my_coche = Coche(2,3,"rojo")
my_coche.gasto()
my_coche.potencia()

Pero lo que quiero es crear varios sin tener que llamarlos uno a uno. Imaginemos que tuviera 100 en vez de 10. Seria muy tesioso :)

Muchas gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Cristofer

duda con POO Python

Publicado por Cristofer (34 intervenciones) el 13/12/2014 22:54:48
Hola amigo ¡ Lo que quieres hacer es mas simple de lo que crees primero que nada todo eso de random.choice metelo en el __init__ de la clase, lo único que vas a dejar afuera de la clase es la "Multi-Instanciacion" todo lo demás metelo en el __init__. Ahora para hacer lo que pides pues vamos a convertir los elementos de una lista en los objetos para esto simplemente necesitamos saber cuantos objetos instanciaremos... si tienes un numero exacto continua con lo que sigue si necesitas pedírselo al usuario solo usa algo como:

1
n = int(input("Ingrese numero de instanciaciones: "))

Bien ahora vamos con nuestra super multi instanciacion ¡... Con algo como esto:
1
2
3
4
5
autos = []
x = 1
while x =! n:
    autos.append(Coche())
    x += 1

Bueno no lo he probado pero ya te andarás dando una idea de que tu error era dejar tantas cosas innecesariamente fuera de la clase xP para algo existe el __init__ !!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

duda con POO Python

Publicado por pablo (2 intervenciones) el 14/12/2014 15:31:49
Muchas gracias por la respuesta, ya entiendo que es lo que estaba haciendo mal :)
Me gustaría preguntar otra cosa, creo que mas o menos voy entendiendo los conceptos de la POO pero creo que no veo realemnte en alcance que tiene. Es decir he leido que es muy util e importante pero aun no se porque. Por ejemplo el programa también lo pude haber erscrito mas facilmente de la siguiente forma con una sola función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import random
 
 
COLOR = ["blanco", "verde", "negro", "rojo", "azul", "blanco"]
GASOLINA = [1, 2, 3, 4, 5, 6, 7, 8, 9]
CILINDRADA = [10, 20, 30, 40, 50, 60, 70, 80, 90]
 
 
 
def Coche(gasolina, cilindrada, color):
    if 	gasolina > 5:
        print "Coche", color, "gasta mucho"
    else:
        print "Coche", color, "gasta poco"
 
 
    if cilindrada > 50:
        print "Coche", color, "es potente"
    else:
        print "Coche", color, "no es potente"
 
 
lista=[]
for i in range(10):
    i = [random.choice(GASOLINA), random.choice(CILINDRADA), random.choice(COLOR)]
    lista.append(i)
 
 
for k in range(10):
    Coche(lista[k][0],lista[k][1],lista[k][2])


Gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Cristofer

duda con POO Python

Publicado por Cristofer (34 intervenciones) el 15/12/2014 06:19:37
Hola amigo te doy la bienvenida al club de la gente que cree que POO es solo para acomplejar las cosas, es decir el gran POO tiene Herencia¡¡¡ wow que genial ¡¡¡ ademas tiene Poliformismo ¡¡¡¡ que cosa mas increíble y útil ¡¡¡ y ademas tiene encapsulamiento que mejor que eso ?? bendigo al desarrollador del ping-pon de la atari(que en paz descanse :,) ) por la increíble hazaña de programarlo sin POO ¡¡

Mira te seré sin0 ni yo le encuentro la utilidad a POO creo al igual que tu que con funciones se puede hacer exactamente lo mismo PERO solo te dire una cosa... Aprende POO y úsala a partir de ahora hasta siempre algunos dicen que la única forma de encontrarle el chiste a la POO es usándola, yo en lo personal seguiré ese consejo es decir sin importar si POO es útil o no entre un desarrollador que sabe POO y otro que no es preferible el que tiene ese conocimiento extra no lo crees ?

Por otro lado al usar Tkinter y cualquier modulo estas usando programación orientada a objetos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar