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?
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 quea = 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 llamadaa.foo(x, y)
,a
es un parámetro implícito que se pasa automáticamente afoo()
como primer parámetro. Al definirfoo()
sin embargo, el primer parámetro para la instancia de la clase debe mencionarse explícitamente, por ejemplodef 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__
quePython
proporciona a personalizar objetos– y2k-shubham
21 de agosto de 2018 a las 8:18
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.
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.
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?
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
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
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.