¿Es necesario incluir __init__ como la primera función cada vez en una clase en Python?

5 minutos de lectura

avatar de usuario
NOVATO

En Python, quiero saber si es necesario incluir __init__ como el primer método al crear una clase, como en el siguiente ejemplo:

class ExampleClass: 

    def __init__(self, some_message): 
        self.message = some_message 
        print "New Class instance created, with message:" 
        print self.message 

Además, ¿por qué usamos self para llamar a los métodos? ¿Alguien puede explicar el uso de “yo” en detalle?

Además, ¿por qué usamos pass declaración en Python?

avatar de usuario
susam pal

No, no es necesario.

Por ejemplo.

class A(object):
    def f():
        print 'foo'

Y, por supuesto, puede usarlo, de esta manera:

a = A()
a.f()

De hecho, incluso puede definir una clase de esta manera.

class A:
    pass

Sin embargo, definir __init__ es una práctica común porque las instancias de una clase generalmente almacenan algún tipo de información o datos de estado y los métodos de la clase ofrecen una forma de manipular o hacer algo con esa información o datos de estado. __init__ nos permite inicializar esta información o datos de estado mientras creamos una instancia de la clase.

Aquí hay un ejemplo completo.

class BankAccount(object):
    def __init__(self, deposit):
        self.amount = deposit

    def withdraw(self, amount):
        self.amount -= amount

    def deposit(self, amount):
        self.amount += amount

    def balance(self):
        return self.amount

# Let me create an instance of 'BankAccount' class with the initial
# balance as $2000.
myAccount = BankAccount(2000)

# Let me check if the balance is right.
print myAccount.balance()

# Let me deposit my salary
myAccount.deposit(10000)

# Let me withdraw some money to buy dinner.
myAccount.withdraw(15)

# What's the balance left?
print myAccount.balance()

Una instancia de la clase siempre se pasa como primer argumento a un método de la clase. Por ejemplo si hay class A y tienes una instancia a = A()Cuando sea que llames a.foo(x, y), Python llamadas foo(a, x, y) de class A automáticamente. (Observe el primer argumento.) Por convención, llamamos a este primer argumento como self.

  • ITYM a = A()a pesar de que a = A también funciona pero hace algo diferente.

    – Alok Singhal

    28 de julio de 2011 a las 4:39

  • @SusamPal Si no incluyo __init__necesito pasar self en cada función como parámetro.

    – Brandon Kheang

    3 de octubre de 2017 a las 3:07


  • @BrandonKheang No, no necesita pasar una instancia de la clase (llamada self por convención) a cada función explícitamente. en la llamada a.foo(x, y), a es un parámetro implícito que se pasa automáticamente a foo() como primer parámetro. Al definir foo() sin embargo, el primer parámetro para la instancia de la clase debe mencionarse explícitamente, por ejemplo def foo(self, x, y): pass.

    – Susam Pal

    3 de octubre de 2017 a las 6:07


  • __init__ es solo uno de los muchos funciones especiales me gusta __del__ y __str__ que Python proporciona a personalizar objetos

    – y2k-shubham

    21 de agosto de 2018 a las 8:18


avatar de usuario
joaquín

Además de otras respuestas, un punto en su pregunta que no se ha abordado:

¿Es necesario incluir __init__ como el primero ¿Funciona cada vez en una clase en Python?

La respuesta es no. En caso de que necesite un constructor, puede ubicarse en cualquier posición de su código, aunque el lugar convencional y lógico es el comienzo.

avatar de usuario
lucas kauffmann

No necesita ponerlo en su Clase; es el constructor de objetos.

Lo necesitará si desea que las cosas le sucedan automáticamente a su objeto cuando se crea una instancia.

avatar de usuario
Nicolás TJ

No, no es necesario usar el init en una clase. Es un constructor de objetos que define valores predeterminados al llamar a la clase.

Si está programando de manera orientada a objetos y debe tener una estructura básica de su clase. A menudo necesitará esto.

Leí tu otra sub-pregunta sobre

¿Puedes explicar sobre el uso de “yo”? — duro

Consulte esta publicación en stackoverflow. Hay muchos enlaces útiles para ayudarlo a comprender mejor la función de inicio de python.

Python __init__ y self, ¿qué hacen?

avatar de usuario
Artsiom Rudzenka

Seguro que esto no es obligatorio.

Lea más sobre la definición de clases de python aquí y aquí.

Leer más sobre __init__ puedes aquí y Python __init__ y self, ¿qué hacen?

En general __init__ es un tipo de constructor que se llama automáticamente y le permite realizar cualquier acción adicional (agregar variables, llamar a cualquier método, etc.) algo con él antes de continuar, por ejemplo, recordar el tiempo de creación o serializar su estado inicial, etc.) mientras se crea el objeto. Entonces, si no necesita hacer alguna preparación especial, puede omitir su uso.

  • self es el objeto sobre el que llamas al método.

    – Karl Knechtel

    28 de julio de 2011 a las 5:36

  • @abc: lea el último enlace sobre uno mismo y en eso – ese hilo explica cuidadosamente estas dos declaraciones

    – Artsiom Rudzenka

    28 de julio de 2011 a las 5:50

avatar de usuario
Juan Zuluaga

No es necesario el “en eso” declaración, además de la “pass“La declaración solo se usa para saltar, ya sea a la siguiente parte del código, o simplemente saltar porque se llegó a una parte especial como una declaración “si”.

  • self es el objeto sobre el que llamas al método.

    – Karl Knechtel

    28 de julio de 2011 a las 5:36

  • @abc: lea el último enlace sobre uno mismo y en eso – ese hilo explica cuidadosamente estas dos declaraciones

    – Artsiom Rudzenka

    28 de julio de 2011 a las 5:50

avatar de usuario
la pendiente de la esperanza

Inicialmente también luché con esa pregunta, luego me di cuenta de que es solo otra forma de almacenar ciertos datos en su objeto y que los datos se pueden pasar a cualquier método de objeto que defina, ya que su método de instancia tiene un argumento propio que puede apuntar a los datos que usted creado en el método init.

¿Ha sido útil esta solución?