Bu bölümde "instance" yani "örnek, örnekleme" kavramından söz edeceğiz. Dolayısıyla biraz kısa olacak. Geçen bölümden de hatırlayacağınız üzere bazı nesneler oluşturduk. Bu nesneler, class yapısına bağlı nesnelerdi. Bunlara da sürekli olarak "nesne" diyorduk. Ancak oluşturduğumuz bu 'nesnelere' instance yani örnekleme denir. Oluşturduğumuz her nesne, class yapısının bir örneği, örneklemi durumundadır. Dolayısıyla instance kelimesini duyduğunuzda, gördüğünüzde ya da kelimenin anlamı size sorulduğunda bu bilgiyi kullanabilirsiniz.
Şimdi, iki önemli noktaya değineceğim. Normalde class yapılarında ortak bir yapıdan ama farklı özelliklerden söz ediyoruz. Eğer bu ortak yapı; yaşanılan bir yer, okul gibi yapılarsa bunları değişken olarak atayabiliyoruz. Örneğin bir okulun öğrencileri hakkında bir class oluşturacağız. Bu durumda öğrenciler birer instance durumundadır. "Öğrenci" yapısı aynı ama her öğrencinin özellikleri farklıdır. Okul ise tek bir tanedir ve öğrenciler gibi başka bir okul ile kıyaslamaya ya da okula özellik tanımlamaya gerek yoktur. Ne demek istiyorum?

Bu, klasik bir sınıf (class) tanımlamasıdır; biliyorsunuz. Aşağıda s1, s2... şeklinde tanımladığım nesneler ise birer instance konumundadır. Yani Student isimli class yapısının bir örneklemidir. Okul konusuna dönelim. Bu noktada biz okulları kıyaslamıyoruz. Tek bir okuldaki öğrencileri kıyaslıyoruz. Dolayısıyla aşağıdaki gibi bir kullanım sağlayabilirim.

Gördüğünüz üzere school = "XXX University" şeklinde bir üniversite ismi tanımladım. Bunu, __init__ fonksiyonuna koymama hiç gerek yok çünkü bunun başlatılmasına da, sürdürülmesine de gerek yok. Bu, class yapısının kendi değişkenidir; instance konumunda değildir.
Aşağıdaki görsele de bakalım.

Aşağıda, dikkat ederseniz hem Student.school olarak hem de s1.school olarak çağırabildim. Yani hem okulun adını hem de s1 isimli öğrencinin okuduğu okulu alabildim. İşte, class yapılarının kendi değişkenleri yani instance olmayanlar bize bu tarz bir kolaylık sağlıyor.
Dikkat edelim:

school değişkeni, class yapısının kendisine ait olduğu için onu Student.school ve s1.school şeklinde çağırabildik. Ancak Student.name demek istediğimde __init__ içine verdiğim name özelliğine erişemediğimi görüyorsunuz. Çünkü bu, class yapısının kendi değişkeni değil, bir instance değişkenidir.
Peki, başka bir yerde ilk tanımladığımız school değişkeninden bağımsız olarak bu değişkenin değerini değiştirebilir miyiz?

En üstte biraz önceki school = "XXX University" ifademiz mevcut. Aşağıda, yeşil kutucukta ise Student.school = "YYY University" ifadesi mevcut. Bu değişikliği yaptıktan sonra okul adını yazdırıyoruz ve değerin gerçekten de değiştiğini görüyoruz.
Bunun ne gibi avantajlar sağlayabileceğini daha önce görmüştük. Belli bir koşula bağlı olarak değişken değerlerini geçici olarak değiştirmeye olanak tanıyacağını söylemiştik. Elbette, henüz veri tabanı işlemlerine geçmedik ama örneğin bir öğrenci okulunu değiştirecekse bunu bir koşula bağlarsınız ve değiştirme esnasında siz de okulun adını değiştirirsiniz. Tam bu esnada veri tabanında bulunan eski öğrenci bilgisini silip yerine yenisini yazabilirsiniz.
Aynı değiştirme işlemini direkt olarak instance değişkeni için de yapabiliriz. Görelim.

s1 isimli öğrencinin ismi Ali iken aşağıda s1.name = "Ayça" diyerek bunu değiştirebildik. Elbette, diğer değişkenleri de değiştirebilirsiniz.
Blogun başında school = "XXX University" şeklinde bir class değişkeni oluşturduk. Dilerseniz şimdi, int değere sahip bir class değişkeni daha oluşturalım. Bu örnek için yine Computer örneğine döndüm ancak siz aynı şeyi Student veya başka bir class için de yapabilirsiniz.
Aşağıdaki görseli, altına yazacağım şeylerle paralel olarak inceleyin.

7. satırda computerCounter = 0 şeklinde bir class değişkeni tanımladığımı görüyorsunuz. Bu, kaç instance oluşturulacaksa onların sayısını tutacaktır.
Bir önceki blogda şunu demiştim:

O zaman self parametresi sayesinde oluşturduğumuz bir instance için satır sırasına göre ilk önce brand, processor, ssd ve hdd özellikleri tanımlanacak. Sonrasında biraz önce tanımladığımız class değişkeninin değeri, 17. satır sayesinde bir artırılacaktır.
Bu sayma işlemi bütün sınıfı ilgilendirdiği için de 23. satırdaki gibi Computer.computerCounter diyoruz.
Bir instance daha tanımlayalım ve çıktımıza bakalım.

Gördüğünüz üzere her yeni instance için brand, processor, ssd ve hdd özellikleri atandıktan sonra sayıyı tutan değişken bir artırılıyor ve sonucumuz beklediğimiz gibi 3 olarak geliyor.
Yayınlanma Tarihi: 2022-12-22 22:49:23
Son Düzenleme Tarihi: 2022-12-27 10:49:48