Python'da “_init_” nedir?

Python hakkında her şey bu kategori altında yer alacaktır.
Cevapla
Kullanıcı avatarı
admin
Site Admin
Site Admin
Mesajlar: 29
Kayıt: Prş Nis 23, 2020 10:58 pm
Instagram: codingmonster1
Favori Kütüphane: Matplotlib
Teşekkür etti: 1 kez
Teşekkür edildi: 1 kez
İletişim:

Python'da “_init_” nedir?

Mesaj gönderen admin »

__init__ (çift alt çizgi “init” ve ardından çift alt çizgi), Python'da bir sınıf için bir yöntem adı olarak kullanıldığında, bir örnek “başlatma” işlevidir.

Python'da “özel” sınıf yöntemlerinin ve diğer niteliklerin çoğu (neredeyse tamamı) “çift alt çizgi” karakterleriyle sarılır. Bunlar bazen “dunder” yöntemleri (veya öznitelikleri) olarak adlandırılır.

Bunun ne anlama geldiğini anlamak için, önce bir Python sınıfı ile ne demek istediğimizi anlamalısınız.

Python'daki bir sınıf bir nesnenin açıklamasıdır. Bunu, bir nesnenin “örneklerini” oluşturmak için kullanılan bir çeşit şablon olarak düşünebilirsiniz. Nesne, verilerin ve söz konusu verilerin "özniteliklerinin" birleşimidir. Python'daki sınıflara “türler” de denir. Bu, sınıfları uygulayarak Python'da özel veri türlerini tanımlayabileceği anlamına gelir.

Bir sınıf için bir tür “nitelik” “yöntem” olarak adlandırılır. Yöntemler işlevlerdir, ancak ilişkili veri türü açısından tanımlanırlar. Bu nedenle, .move () yöntemine sahip birkaç araç sınıfımız olsaydı, bir “Araba” “Yol” hareket ettiğini gösterirken “yolda” sürdüğüne dair bir mesaj göstererek “hareket edebilir” "Havada uçuyor." Diğer durumlarda, bu varsayımsal nesne sınıflarının örneklerini kullanan programcı, kodun bu özelliğini kullanmak için my_vehicle.move () yöntemini çağırır.

Tüm araç sınıfları hareket eder. Ancak her biri farklı şekillerde hareket edebilir ve aralıkları, maksimum hızları ve yakıt veya enerji tüketme biçimleri hakkında ayrıntılar, her türün (alt sınıf) uygulanmasına devredilebilir.

İşte bir örnek:

Kod: Tümünü seç

class araba:
    def __init__(self, color)
        self.color = color
    def move(self):
        print("sürüş...")
 
class Boat:
    def __init__(self, motive):
        self.motive = motive
    def move(self):
        print("%s suda..." % self.motive)
 
this = araba('white')
this.move()
# prints: driving down the road...
 
that = Boat('Sailing')
that.move()
# prints: Sailing through the water...
 
speedy = Boat('Motoring')
speedy.move()
# prints: Motoring through the water...
 
canoe = Boat('paddling')
canoe.move()
# ... you can guess
Bu örnekte, her biri için birkaç sınıf (Araba ve Tekne) ve başlatma işlevi tanımladım (biri kodumuzda kullanmadığımız bir renk belirler; diğeri teknenin nasıl hareket ettiğini açıklayan bir özellik belirler).

Bu nesnelerin örneklerinin nasıl oluşturulduğunu (somutlaştırıldığını) ve nasıl kullanılabileceğini gösteriyorum.

Elbette bu örnekler basmakalıptır. Gerçek kod, sınıflarla çok daha yararlı şeyler yapar, çok mantıklı ve karmaşık veri yapıları tanımlar ve çok daha kullanışlı işlevsellikler uygular.

Özellikle Python'da yöntemleri tanımlarken açıkça “self” parametresine başvurmalısınız. İstediğiniz herhangi bir ada sahip olabilir (ancak diğer Python programcıları “kendinden” başka bir şey çağırırsanız muhtemelen loş bir görünüm alacaktır).

Yöntemi * çağırdığınızda, bu parametreye karşılık gelen bir argüman iletmezsiniz. Bunu örtük olarak, öğesinin solundaki nesneye başvuru olarak kabul edebilirsiniz. (nokta) yöntemin adından önce gelir.

Bu nedenle canoe.move (), boat_move adında bir işleve sahipmişsiniz gibi davranılır ve speedy.move () aynı işlevi çağırır ancak farklı (örtük) bir bağımsız değişkenle (boat_move (hızlı)) hareket eder (canoe). Bu arada this.move (), başka bir işlev (car_move (this) gibi bir ad) olarak adlandırdığınız gibi olur.

Nesneye yönelik programlamanın tüm amacı, nesneleri yapıları ve bu yapıların nasıl davrandıkları açısından tanımlayabilmemizdir - ve nesnenin durumunu (ve iç tutarlılığını) koruyan kendi yöntemlerine sahip olabilirler. Bunun önemli bir sonucu, sınıflar hiyerarşilerine sahip olabilmemiz, farklı kategorilerin daha genel sınıflardan yapı ve işlevselliği miras alabileceği ve işlevselliği gereğinden fazla kullanabileceği veya işlevselliği artırabileceği ve bunlara daha fazla ayrıntı ekleyebileceğimizdir. (Örneğim bunu göstermiyor ve bu cevap için çok ayrıntıya gireceğim. Modern nesne yönelimli programlama, miras yerine kompozisyonu tercih etme eğilimindedir ve anlambilim ve konular önemsiz örneklere uygun değildir).

Cevapla