Bienvenido a la Comunidad de Treehouse

¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.

¿Buscas aprender algo nuevo?

Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de

Inicia tu prueba gratuita

Python Python Orientado a Objetos Básico Emular funciones integradas __iter__

¿Cuándo usar argumentos en mi método?

Quiero asegurarme de entender cuándo agregaría argumentos a un método. Estoy en la __init__ lección y a veces agregamos argumentos a los métodos y otras veces no. Por mi comprensión, agregaríamos un argumento como lo hicimos a continuación para que cuando creemos una instancia configuremos ese argumento, ¿verdad? Mientras que si no usamos el argumento, no podemos pasar ese atributo cuando creamos la instancia. ¿Es correcto?

class Concesionario:
    def __init__(self):
        self.cars = 


    def __iter__(self):
        yield from self.cars

    def agregar_auto(self, car):
        self.car.append(car)

2 Respuestas

Dane Parchment
Dane Parchment
11,078 Puntos

TLDR: Utilizas argumentos siempre que quieras parametrizar tus métodos, lo que básicamente significa hacer que la salida de tus métodos sea afectada por argumentos proporcionados por el usuario. (Esto no es **exactamente* lo que significa, pero en este caso es lo suficientemente cercano)*

Básicamente, quieres usar argumentos siempre que quieras que la salida de tu método sea afectada por algún tipo de entrada. Digamos, por ejemplo, que estás creando un método que suma dos números.

def add():
    return 1 + 2

Este es un código perfectamente válido, pero siempre que lo uses, solo sumará 1 y 2. ¿Esto es algo sin sentido, verdad? Entonces, cambiemos eso para usar algunas variables, de esa manera podemos cambiar cuáles son los números.

a = 1
b = 2
def add():
    return a + b

Está bien, ahora estamos usando variables, así que podemos cambiar los números a lo que queramos en lugar de solo tenerlos codificados. Pero ahora nos hemos topado con otro problema. Quienquiera que esté usando tu add método, puede que no tenga acceso a esas variables (por ejemplo, pueden estar importando tu método de suma y usándolo en su código), o si tienen acceso, esas variables pueden cambiar durante la vida del programa antes de que se llame al método de suma.

Entonces, para resolver esto, haremos que el método use argumentos, de esa manera cuando se llame al método el usuario puede especificar exactamente qué quiere sumar. Hagamos eso extrayendo las variables en argumentos.

def add(a, b):
    return a + b

¡Excelente! ¡Lo hicimos! ¡Ahora nuestro método está usando argumentos!

¡Pero! ¿Cuándo no usamos argumentos? Básicamente, si sabemos que no necesitamos ningún tipo de entrada para cambiar la salida de nuestro método. Para simplificarlo, digamos que tenemos un método que simplemente imprime hola;

def say_hello():
   print(Hello.)

En este caso, no necesitamos ningún tipo de entrada para cambiar lo que es la salida de este método, ¡porque siempre estaremos diciendo hola!

¡Espero que eso te aclare las cosas!

P.S. ¡Una cosa más para repasar! Los métodos de clase son una excepción única a la regla anterior. Cada vez que estamos creando un método en una clase, siempre estarán usando implícitamente un argumento llamado self, esto es algo que Python requiere para que el método de clase interactúe adecuadamente con la clase y su estado interno. Por ejemplo:

class Persona:
   def __init__(self, name):
        self.name = name

   def say_hello(self):
        print(f{self.name} says hello!)

   def walk(self):
       print(Walks in a general direction)

En este caso, puedes ver que necesitaremos el self argumento siempre que necesitemos acceder al estado interno de nuestra clase (en este caso, self.name). Pero también notarás que requerimos este argumento self incluso cuando no lo necesitamos como en el walk método. Esto es porque un método de clase tiene el self argumento como parámetro implícito. Lo que significa que el método está implícito y no necesita establecerse explícitamente en la llamada del método. Por ejemplo:

class Persona:
   def __init__(self, name):
        self.name = name

   def say_hello(self):
        print(f{self.name} says hello!)

   def walk(self):
       print(Walks in a general direction)

me = Persona(Dane)
persona.walk() # Walks in a general direction

Ves que no necesitamos colocar ningún argumento en la llamada porque el self está implícito, la clase misma lo completará. Sin embargo, si no agregáramos el parámetro self al definir el método en la clase, obtendríamos un error.

class Persona:
   def __init__(self, name):
        self.name = name

   def say_hello(self):
        print(f{self.name} says hello!)

   def walk(): # ¿Notas que no estamos usando el parámetro self?
       print(Walks in a general direction)

me = Persona(Dane)
persona.walk() # Daría un error de conteo de argumentos

Nuevamente, espero que eso te aclare las cosas, si necesitas más ayuda o aclaración, hazme saber.

Steven Parker
Steven Parker
244 163 puntos

Podrías querer corregir los paréntesis desequilibrados en los ejemplos. :see_no_evil:

Steven Parker
Steven Parker
244 163 puntos

Si una propiedad que un objeto requiere siempre será conocida cuando se crea, tiene sentido tener un argumento para pasarlo y configurarlo en ese momento.

Pero si un objeto puede existir sin ningún atributo inicial (podrían agregarse más tarde), no se necesitan argumentos al crearlo.

Dane Parchment
Dane Parchment
11,078 Puntos

Jaja, me ganaste con menos palabras, pude haber exagerado con mi respuesta.

Puede que haya exagerado la respuesta, Dane, ¡pero me ayudó a explicar mucho y todavía no estoy en ese tema!