Usar objetos como argumentos en un constructor.

Deoxys

Pongamos que (en python) creo una clase (patata), con sus atributos y sus cosas. Al crear otra clase (bicho), necesito acceder a los atributos de esa clase y utilizarlos a la hora de definir la nueva clase.

Si, por ejemplo, hago algo como esto en el constructor:

def __init__ bicho(self,patata):
    print patata.atributo

imprime el atributo de la clase que quiero utilizar. Pero si hago algo como esto:

def __init__ bicho(self,patata):
    varbicho=random.randrange(patata.atributo)

(Eso o muchas otras operaciones usando el atributo de la otra clase), me devuelve un error ("AttributeError: patata instance has no attribute getitem").

Según lo que intente hacer me devuelve un error diferente, pero el caso es que no puedo trabajar con los atributos de la otra clase en el constructor. En el resto de la clase puedo hacer lo que quiera con ellos, pero no donde los necesito. No he encontrado nada especial en la documentación y buscando el error no he encontrado nada útil, si alguien tiene una pista agradecería que me echara una mano.

zoeshadow

No se en concreto como será en Python, pero si no he entendido mal tu pregunta, lo que deberías hacer es pasar una instancia de la clase por parámetro, o usar una clase estática para poder usar sus métodos o atributos en la otra clase.

Algo así funcionaría en Java, supongo que en Python no debería tener mucha diferencia ya que es OOP sencillo.

diametro = 50
ruedaDelantera = Rueda(diametro)
ruedaTrasera = Rueda(diametro)
moto = Moto(ruedaDelantera, ruedaTrasera)

moto.ruedaDelantera.diametro // 50
1 respuesta
Deoxys

No tengo ni idea de qué estaba haciendo mal, pero 10 minutos después de postear esto empezó a funcionar... Al final es como lo estaba intentando hacer la primera vez >:/

wineMan

Al crear otra clase (bicho), necesito acceder a los atributos de esa clase y utilizarlos a la hora de definir la nueva clase.

Huele a:
http://es.wikipedia.org/wiki/Inyecci%C3%B3n_de_dependencias

Algo que los neófitos en OOP no suelen usar.

#2 apuntaba a eso cuando te decía: "pasar una instancia de la clase por parámetro".

2

Usuarios habituales

  • wineMan
  • Deoxys
  • zoeshadow