2011-07-28 10 views
16

, ben aşağıdaki örnekte olduğu gibi, bir sınıf oluştururken ilk yöntem olarak __init__ dahil etmek gerekli olup olmadığını bilmek istiyorum:Python'da bir sınıfta her seferinde __init__ ilk işlev olarak eklenmeli mi? Python

Ayrıca
class ExampleClass: 

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

, neden yöntemleri çağırmak için self kullanırım? Birisi ayrıntılı olarak "kendini" kullanabileceğini açıklayabilir mi?

Ayrıca, neden Python'da pass deyimini kullanıyoruz?

cevap

34

Hayır, gerekli değil. Örneğin,

.

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

Ve tabii bu şekilde, bunu kullanabilirsiniz: hatta bu şekilde bir sınıf tanımlayabilirsiniz Aslında

a = A() 
a.f() 

. Bir sınıfın örneklerinin genellikle devlet informtion veya veri ve sınıfın yöntemleri çeşit depolamak manipüle veya durum bilgisi veya veri ile bir şeyler yapmak için bir yol sunar çünkü

class A: 
    pass 

Ancak __init__ tanımlayan yaygın bir uygulamadır. __init__, bu durum bilgisini veya verilerini, sınıfın bir örneğini oluştururken başlatmamıza izin verir.

İşte tam bir örnek.

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

Sınıfın bir örneği, her zaman sınıfın yöntemine ilk argüman olarak iletilir. Örneğin, class A varsa ve a.foo(x, y), Python numaralı çağrıları her foo(a, x, y) aralığını foo(a, x, y) otomatik olarak foo(a, x, y) aradığınızda, bir örneğiniz varsa a = A(). (İlk argümanı not edin.) Kural olarak, bu ilk argümanı self olarak adlandırıyoruz.

+0

__init __ kullanımı hakkında ayrıntılı olarak açıklayabilir misiniz ??? – NOOB

+0

ITYM 'a = A()', a = A' da çalışır ancak farklı bir şey yapar. –

+0

Alok, Teşekkürler. Onu düzeltti. –

5

Sınıfınıza koymanız gerekmez, nesne yapıcıdır.

Nesnel olduğunuzda nesnelerin otomatik olarak gerçekleşmesini istiyorsanız, buna ihtiyacınız olacak.

0

Bunun gerekli olmadığından emin olun.

Lütfen python sınıfları here ve here tanımlama hakkında daha fazla bilgi edinin.

__init__ hakkında daha fazla bilgi için here ve Python __init__ and self what do they do?.

Genel olarak __init__, otomatik olarak çağrılan ve herhangi bir ek eylem gerçekleştirmenize (değişkenler ekleyerek, herhangi bir yöntemi çağırarak vb.) Olanak sağlayan bir kurucudur. Buradaki fikir, zaten oluşturulduğu için örneği başlatma yeteneğine sahip olmaktır. ve şimdi devam etmeden önce onunla bir şeyler yapmanız gerekebilir - örneğin nesne yaratırken yaratma süresini veya başlangıç ​​durumunu serileştirmek gibi. Öyleyse, özel bir hazırlık yapmanıza gerek yoksa, onu kullanarak atlayabilirsiniz.diğer cevaplara ek olarak

+0

'self', yöntemi çağırdığınız nesnedir. –

+0

@abc - self ve __init__ ile ilgili son bağlantıyı okuyun - bu thread her ikisi de bu açıklamaları dikkatlice açıklar. –

5

, sorunuzu bir nokta ele edilmediğini:

o Python bir sınıfta ilk fonksiyon her şey olarak __init__ dahil etmek gerekli mi?

Cevap hayır. Bir kurucuya ihtiyaç duyduğunuzda, konvansiyonel ve mantıksal yer başlangıç ​​olsa da, kodunuzun herhangi bir yerinde bulunabilir.

0

Hayır, init bir sınıfta kullanmak gerekli değildir. Sınıfı çağırdıktan sonra varsayılan değerleri tanımlayan bir nesne yapıcısıdır.

Eğer OOP dilinde programlama yapıyorsanız ve sınıfınızın temel bir yapısına sahip olmanız gerekiyorsa. Sık sık buna ihtiyacınız olacak.

Ben

u "öz" kullanımı hakkında açıklayabilir ilgili diğer alt soruyu okumak ??? - sert Jul 28 '11 at 5:13

Lütfen bu gönderiye bakın. Python'un init işlevini daha iyi anlamanıza yardımcı olacak birçok yararlı bağlantı var.

Python __init__ and self what do they do?

6

Bu aslında Susam cevabı üzerine bir yorumdur, ama benim temsilcisi hala bir cevap olarak ekliyorum düşük olduğu için.

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

A aslında object den __init__ yöntemini devralır:

Bu durumda dikkati çekiyor.

İlgili konular