Estoy aprendiendo Python a través de libros e Internet y estoy atrapado en un problema de clase.python: crear instancia de clase en otra clase (con un ejemplo genérico)
2 preguntas:
- ¿Cómo se crea una instancia de una clase en otra clase (separado)?
- ¿Cómo paso variables entre la clase y la clase anidada (?)?
Cuando intento crear una instancia de una clase dentro de otra clase (separada), puedo hacerlo dentro de un método. Aquí está el código:
import os
class FOO():
def __init__(self):
self.values = [2, 4, 6, 8]
def do_something(self, x, y):
os.system("clear")
z = self.values[x] * self.values[y]
print "%r * %r = %r" % (self.values[x], self.values[y], z)
class BAR():
def __init__(self):
pass
def something_else(self, a, b):
foo1 = FOO()
foo1.do_something(a, b)
bar = BAR()
bar.something_else(1, 2)
¿Esta, sin embargo, me permite acceder a la clase FOO y es información en otros métodos de barras? ¿Si es así, cómo?
He intentado lo siguiente y tiene un error:
import os
class FOO():
def __init__(self):
self.values = [2, 4, 6, 8]
def do_something(self, x, y):
os.system("clear")
z = self.values[x] * self.values[y]
print "%r * %r = %r" % (self.values[x], self.values[y], z)
class BAR():
def __init__(self):
foo1 = FOO()
def something_else(self, a, b):
foo1.do_something(a, b)
bar = BAR()
bar.something_else(1, 2)
Aquí está el error:
Traceback (most recent call last):
File "cwic.py", line 22, in <module>
bar.something_else(1, 2)
File "cwic.py", line 19, in something_else
foo1.do_something(a, b)
NameError: global name 'foo1' is not defined
me sale el mismo error cuando utilicé:
def __init__(self):
self.foo1 = FOO()
Además, ¿Cómo debería pasar los 'valores' de una clase a la otra?
Háganme saber si mi enfoque general y/o sintaxis son incorrectos. Todas y cada una de las sugerencias son bienvenidas (incluyendo buenas lecturas) ya que estoy recién aprendiendo. Gracias.
Gracias por su minuciosa respuesta! Muy útil. Estoy tratando de entender cómo pasé la información de una clase a otra. Supongo que he visto argumentos como parte de las definiciones de clase y me pregunto si esa es la manera correcta. Pero, no sé cómo usar esa funcionalidad. por cierto, tengo un fondo de VBA. – dwstein