No olvides que en las ciencias un problema casi siempre tiene diversas soluciones, por lo tanto nosotros aquí te mostramos lo más óptimo y eficiente.
Solución:
Todos attributes de una instancia o clase se accede a través de self
que se pasa como primer argumento a todos los métodos. Es por eso que tienes correctamente la firma del método. something_else(self, a, b)
a diferencia de solo something_else(a, b)
como lo haría con otros idiomas. Así que estás buscando:
class BAR():
def __init__(self):
self.foo1 = FOO()
def something_else(self, a, b):
self.foo1.do_something(a, b)
Tenga en cuenta que self no es una palabra clave, es solo un nombre de parámetro como a
y b
por lo que, por ejemplo, podría tener la tentación de utilizar this
en cambio, si tienes experiencia en Java… ¡No lo hagas! hay una convención muy fuerte para usar self
para este propósito y harás enojar a muchas personas (incluso a ti mismo eventualmente) si usas cualquier otra cosa.
Con respecto a pasar valores, no estoy seguro de lo que quiere decir, puede acceder a ellos a través de instancias como foo1.an_attribute
o pasarlos como argumentos a funciones como en function(arg)
pero parece que has usado ambas técnicas en tu ejemplo, así que no estoy seguro de qué más estás buscando…
Editar
En respuesta al comentario de @dwstein, no estoy seguro de cómo se hace en VB, pero así es como se pasan los argumentos al crear una instancia de una clase.
Si miramos tu clase:
class BAR():
def __init__(self):
self.foo1 = FOO()
Podemos cambiar eso para aceptar un argumento baz cambiando la segunda línea a def __init__(self, baz):
y luego si queremos podemos hacer baz
un attribute de nuestra nueva instancia de BAR
configurando self.baz = baz
. Espero que ayude.
En python siempre tienes que usar el “yo” prefix al acceder a los miembros de su instancia de clase. Probar
class BAR():
def __init__(self):
self.foo1 = FOO()
def something_else(self, a, b):
self.foo1.do_something(a, b)