Saltar al contenido

python: crea una instancia de clase en otra clase (con un ejemplo genérico)

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 bpor 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)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *