2011-07-28 12 views
16

En Python, quiero saber que si es necesario incluir __init__ como el primer método, mientras que la creación de una clase, como en el siguiente ejemplo:¿Es necesario incluir __init__ como la primera función cada vez en una clase en Python?

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é utilizamos self para llamar a métodos? ¿Alguien puede explicar el uso del "yo" en detalle?

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

Respuesta

34

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 se puede definir una clase de esta manera.

class A: 
    pass 

Sin embargo, definir __init__ es una práctica común, ya instancias de una clase suelen almacenar algún tipo de informtion o los datos del estado y los métodos de la clase ofrecen una manera de manipular o hacer algo con esa información de estado o datos. __init__ nos permite inicializar esta información de estado o datos al crear 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 se pasa siempre como primer argumento para un método de la clase. Por ejemplo, si hay class A y tiene una instancia a = A(), cada vez que llame a a.foo(x, y), Python llama al foo(a, x, y) de class A automáticamente. (Observe el primer argumento.) Por convención, nombramos este primer argumento como self.

+0

¿Puedes explicar en detalle sobre el uso de __init __ ??? – NOOB

+0

ITYM 'a = A()', aunque 'a = A' también funciona pero hace algo diferente. –

+0

Alok, gracias. Arreglado. –

5

No necesita ponerlo en su clase, es el constructor del objeto.

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

0

Asegúrese de que esto no sea necesario.

Por favor, lea más sobre la definición de las clases de python here y here.

Más información sobre __init__ puede here y Python __init__ and self what do they do?.

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.), la idea es tener la capacidad de inicializar la instancia, ya que está creada y ahora es posible que deba hacer algo con él antes de continuar, por ejemplo, recordar el tiempo de creación o serializar su estado inicial, etc. al crear el objeto. Entonces, si no necesita hacer alguna preparación especial, puede omitir el uso.

+0

'self' es el objeto sobre el que llama al método. –

+0

@abc - lee el último enlace sobre self y __init__ - ese hilo explica con cuidado ambas declaraciones –

5

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

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

La respuesta es no. En el 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.

0

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

Si está programando en modo OOP y debe tener una estructura básica de su clase. A menudo necesitarás esto.

leí la otra parte de la pregunta con respecto

U puede explicar sobre el uso de "auto" ??? - duro 28 de julio de11 a las 5:13

Por favor, consulte esta publicación en stackoverflow. Hay muchos enlaces útiles para ayudarlo a comprender mejor la función init de Python.

Python __init__ and self what do they do?

6

Esto es realmente un comentario sobre la respuesta de Susam, pero desde mi representante es aún baja que estoy añadiendo como una respuesta.

Vale la pena señalar que en este caso:

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

A realidad hereda __init__ método de object.

Cuestiones relacionadas