Python’da sınıflar, bir nesnenin özelliklerini ve metodlarını tanımlamak için kullanılan temel bir öğedir. Bu nesneyi temsil eden sınıf, belirli bir özellik kümesi ve nesnenin davranışını tanımlayan bir metod kümesi içerir.
Sınıflar, kodun daha modüler ve yeniden kullanılabilir hale gelmesini sağlar. Özellikle büyük projelerde, birçok farklı nesne türü vardır ve bu nesnelerin her birinde aynı durumda olan birçok özellik veya metod olduğu durumda sınıfları kullanmak çok faydalıdır. Bu durumda, her bir nesne için ayrı ayrı kod yazmak yerine, tüm nesneleri temsil eden bir sınıf oluşturulabilir.
Sınıfların başka bir yararı, nesnelerin niteliklerini ve işlevlerini bir arada tutabilmesidir. Sınıflar, verilerin hizalanmasını kolaylaştırır ve nesne yönlendirme ve veri saklama kapasitesini artırabilir. Bu nedenle, herhangi bir programcı, Python sınıflarının nasıl oluşturulduğunu ve kullanıldığını öğrenerek, daha modüler ve optimize edilmiş kod yazabilir.
Sınıflar Nedir?
Python dili, nesne yönelimli bir programlama dilidir. Bu nedenle, Python’da nesneler oldukça önemlidir. Nesnelerin oluşturulması, sınıflar sayesinde gerçekleştirilir.
Bir sınıf, nesnelerin karakteristik özelliklerini tanımlarken kullanılır. Sınıflar, birçok nesnenin tanımlayıcısıdır. Bir sınıfı oluşturmak için, ‘class’ anahtar kelimesi kullanılır. Sınıflar, ögeleri işlemek için kodlama yaparken, düzenli ve anlaşılır bir yöntem kullanmak isteyenler için ideal bir araçtır.
- Bir sınıfın tanımlandığı temel özellikleri; adı, nitelikleri ve metodlarını içermektedir.
- Bir nesne oluşturulduğunda, sınıfın özelliklerinden yararlanılır. Bu özellikler, sınıfın nitelikleri olarak bilinir ve her bir nesnesi farklı olabilir.
- Bir sınıfın şablonu, birçok nesnenin oluşturulmasını kolaylaştırır.
Özetle, Python’da sınıflar, nesne yönelimli programlama için temel bir yapı taşıdır. Sınıflar sayesinde, sadece bir kez tasarlayarak bir nesneyi birden fazla kez kullanabilir ve zaman kazanabilirsiniz.
Sınıf Oluşturma
Sınıf, benzer özellikleri olan nesneleri gruplandıran bir kavramdır. Python’da, sınıf tanımlamak için ‘class’ anahtar kelimesi kullanılır. Sınıf tanımlama, sınıfın özelliklerini ve davranışlarını belirleyen kod bloklarını oluşturma işlemidir.
Bir sınıf oluşturmak için ‘class’ anahtar kelimesini kullanıp sınıfın adını belirliyoruz. Sınıf tanımlama bloğu iki noktadan sonra başlar ve girintili kod blokları içerir. Sınıfın özellikleri değişkenler aracılığıyla tanımlanır ve bu özelliklere ‘öznitelik’ denir. Örneğin:
class Araba: # Araba sınıfı oluşturuluyor marka = "Ford" # Öznitelik: marka model = "Mustang" # Öznitelik: model renk = "Kırmızı" # Öznitelik: renk |
Bir sınıfın özelliklerini kullanmak için, öncelikle sınıfın bir örneği oluşturulur. Sınıfın bir örneği, sınıfın bir nesnesidir ve ‘instancename = classname()’ şeklinde oluşturulur. Daha sonra özelliklere sınıf örneği aracılığıyla erişilir. Örneğin:
araba = Araba() # Araba sınıfının bir örneği oluşturuluyor print(araba.marka) # 'Ford' print(araba.model) # 'Mustang' print(araba.renk) # 'Kırmızı' |
Bunun yanı sıra sınıfın davranışlarını belirleyen fonksiyonlar, sınıfın ‘metodları’ olarak adlandırılır. Sınıfın metotları girintili kod blokları aracılığıyla tanımlanır ve ‘self’ anahtar kelimesini kullanarak sınıfın özelliklerine erişilebilir. Örneğin:
class Araba: marka = "Ford" model = "Mustang" renk = "Kırmızı" def calistir(self): print("Araba çalıştırıldı.") def durdur(self): print("Araba durduruldu.") |
Bu örnek sınıf, ‘calistir’ ve ‘durdur’ adlı metodlara sahiptir. Bu metotlar, sınıf örneği aracılığıyla kullanılabilir:
araba = Araba() araba.calistir() # 'Araba çalıştırıldı.' araba.durdur() # 'Araba durduruldu.' |
Bir sınıfın özellikleri ve metodları, sınıf tanımlaması içinde istediğimiz kadar tanımlanabilir. Bu nedenle sınıflar, büyük ve karmaşık kod bloklarının düzenlenmesinde çok yararlıdır.
Sınıfların Özellikleri
Python’da sınıf özellikleri, sınıfın tanımlanmasında kullanılan değişkenlerdir. Bu özellikler, sınıfın nitelikleri veya öznitelikleri olarak da adlandırılır. Sınıf özellikleri, sınıfların farklı olmasını sağlar ve sınıfların nesnelerinin özelliklerini tutar.
Sınıf özelliklerine, sınıfın içinde tanımlanan değişkenler yardımıyla erişilir. Sınıfın özelliklerine erişmek için “.” operatörü kullanılır. Sınıf özelliklerinin değerleri, sınıfın içindeki constructor metodu olan __init__() yöntemi kullanılarak ayarlanır.
Özellikler, sınıfın içerisinde tanımlandıklarından, tüm sınıf ve nesneler tarafından kullanılabilirler. Ayrıca, sınıf özellikleri aynı zamanda erişim belirleyicileri ile de kontrol edilebilir.
Sınıf özellikleri, listeler, demetler, sözlükler veya sadece bir dize gibi herhangi bir veri türü olabilir. Sınıf özellikleri, ilgili nesnenin özellikleri ile birlikte, nesnenin durumunu tanımlayarak nesnenin kullanımını etkiler. Sınıf özellikleri, sınıfın davranışını değiştirerek, nesnelerin özelliklerini açıklar ve nesnelerin kullanımını daha anlaşılır yapar.
Sonuç olarak, sınıflar Python’daki nesne yönelimli programlamanın temel yapı taşı olduğundan, sınıf özellikleri de sınıf tanımlarının vazgeçilmez bir parçasıdır. Sınıf özellikleri, nesne yönelimli programlama mantığında güçlü bir araçtır ve sınıf tanımlamalarının esnekliğini artırır.
__init__() Metodu
Python’da __init__() metodu, bir sınıfın yapıcı metodudur. Yapıcı metodun görevi, sınıf örnekleri oluşturulurken kullanılacak olan özellikleri (attribute) ayarlamaktır.
__init__() metodunu bir sınıfa eklemek için, sınıfın içinde bir fonksiyon olarak tanımlanır ve kendisine “__init__” ismi verilir. Aşağıdaki örnek bu kullanımı açıklar:
Kod | Çıktı |
---|---|
class Araba: def __init__(self, model, yıl, renk): self.model = model self.yıl = yıl self.renk = renkaraba1 = Araba("BMW", 2022, "Mavi")print(araba1.model)print(araba1.yıl)print(araba1.renk) |
BMW2022Mavi |
Bu örnekte, Araba sınıfı __init__() metoduna üç parametre (model, yıl ve renk) alır. Sınıfın öznitelikleri (attribute) de aynı isimlerle başlatılır. Ardından, araba1 isimli bir Araba örneği (instance) oluşturulur. Araba örneği oluşturulurken __init__() metodu otomatik olarak çağrılır ve örneğin özellikleri belirtilen parametre değerleriyle ayarlanır. Son olarak, her özniteliğe erişmek için . operatörü kullanılarak değerler ekrana yazdırılır.
Bu örnekte, “__init__” metodunun kendisi dışında, herhangi bir özellik tanımlamamıza gerek yoktur. Bu nedenle, sınıf örnekleri oluşturulurken __init__ metodunun çağrılması yeterlidir ve sınıfın geri kalanı __init__ metoduna bağlı kalır.
Erişim Belirleyicileri
Python’da erişim belirleyicileri, sınıf özelliklerine erişimi kontrol etmek için kullanılır. Nesne programlama konseptlerine dayanarak, sınıf özelliklerine erişim kontrolü sağlamak için kullanılırlar. Erişim belirleyicileri aşağıdaki gibi dört tane vardır:
- Public: Herkes tarafından erişilebilir. Varsayılan olarak sınıf özellikleri genel olarak tanımlanır.
- Protected: Sınıfın kendisi ve alt sınıflar tarafından erişilebilir. Alt çizgi (_) işareti ile tanımlanır.
- Private: Sadece sınıfın kendisi tarafından erişilebilir. Çift alt çizgi (__) işareti ile tanımlanır.
- Yerel: Sınıf metodu tarafından erişilebilir. Sınıf dışında kullanılamaz.
Erişim belirleyicileri, sınıf özelliklerine erişimi kontrol etmek için kullanılır. Bir özellik veya metodun erişim belirleyicisinin nasıl kullanılacağı, tanımlandığı yerin önünde belirlenir. Örneğin, bir sınıfta yerel bir özellik oluşturmak istiyorsanız, bu özellik, ilgili sınıf metodu içinde tanımlanmalıdır.
Erişim belirleyicileri, sınıfın özellikleri için daha fazla kontrol sağlar. Bu sayede sınıfın otomatik olarak değiştirilmesi veya bir hata oluşması riski azalır. Erişim belirleyicileri, Python programlamada birçok avantaj sağlamaktadır.
Sınıf Metodları ve Öznitelikleri
Python’da sınıfların en önemli özelliklerinden biri, sınıf metotları ve öznitelikleridir. Sınıf öznitelikleri, sınıfın tüm örnekleri tarafından paylaşılan özelliklerdir. Bunlar, sınıfın özelliklerini veya niteliklerini tanımlamak için kullanılır. Sınıf metotları ise sadece sınıfın örneği tarafından değil, kendisi tarafından da çağrılabilen özelliklerdir.
Sınıf öznitelikleri ve metotları genellikle sınıfın başlangıcında tanımlanır. Sınıf özniteliklerini tanımlamak için, özelliklerin isimleri atanır ve varsayılan bir değer atanır. Sınıf metotlarını tanımlamak için, özellikle __init__() metodu gibi, özel adlandırılmış yöntemler kullanılır.
Ayrıca, sınıf öznitelikleri ve metotlarına erişmek için özel bir sözdizimi kullanılır. Örneğin, özelliklere erişmek için sınıf adı, nokta ve öznitelik adı kullanılır. Benzer şekilde, sınıf metotlarına erişmek için de sınıf adı, nokta ve metod adı kullanılır.
Sınıf öznitelikleri ve metotları, sınıfın özelliklerini ve davranışlarını dinamik olarak değiştirmek için de kullanılabilir. Örneğin, bir sınıf özniteliği, bir özelliğin değeri değiştirildiğinde sınıfın davranışını değiştirebilir.
Özetle, sınıf öznitelikleri ve metotları, Python sınıflarının güçlü özellikleridir ve onları kullanarak sınıfları daha dinamik ve özelleştirilebilir hale getirebilirsiniz.
Miras ve Çok Biçimlilik
Python sınıfları, miras ve çok biçimlilik gibi özellikleri barındırır. Miras, bir sınıfın özelliklerinin başka bir sınıfta kullanılmasına izin verir. Bunun anlamı, bazı özelliklerin bir sınıf tarafından diğer bir sınıfa aktarılabilmesidir.
Python’da, miras ilişkisi kurmak için super() fonksiyonu kullanılır. Yeni bir sınıf oluştururken, ana sınıfın özelliklerini kullanarak super() fonksiyonu çağrılır ve ana sınıfın özellikleri yeni sınıfa aktarılır. Bu sayede, aynı kodu tekrar tekrar yazmak yerine, var olan kodu yeniden kullanabiliriz.
Çok biçimlilik, Python sınıflarındaki diğer önemli bir özelliktir. Bu özellik, aynı şekilde kullanılabilecek ancak farklı şekillerde davranan birden fazla özellik veya metot oluşturmamıza olanak tanır. Çok biçimlilik, bir programın daha esnek olmasını sağlar ve farklı durumlarda farklı sonuçlar veren bir kod yaratmamıza olanak tanır.
- Polimorfizm, Python sınıflarındaki çok biçimlilik özelliğinin bir şeklidir. Basitçe söylemek gerekirse, bir sınıfın farklı türlerin nesneleri tarafından kullanılabilmesidir.
- Örneğin, bir hayvan sınıfına sahip olduğumuzu ve bunun kedi ve köpek sınıflarından türediğini varsayalım. Hayvan sınıfı bazı özelliklere sahip olsa da, kedi ve köpek sınıfları farklı özellikler barındırır ve birbirinden farklı davranışlar sergiler.
- Bu sayede, programda hayvan sınıfı kullanarak hem kedi hem de köpek nesneleri oluşturabiliriz ve bu nesneleri farklı şekillerde kullanabiliriz. Örneğin, yemek yeme işlemini yaparken kedi ve köpek farklı tipte yemek tüketebilir.
Miras ve çok biçimlilik, Python sınıflarının güçlü özellikleridir ve bir programcının ihtiyacı olan esnekliği sağlayarak daha verimli bir kod yazarak zaman kazandırır.
Miras
Sınıflarda miras, bir sınıfın diğer sınıflara özelliklerini ve metodlarını aktardığı bir yapıdır. Bu sayede mevcut bir sınıfın kod tekrarından kaçınılabilir ve kodun yeniden kullanımı kolaylaşır. Miras, Python’daki sınıfların en önemli özelliklerinden biridir ve OOP prensiplerinde kritik bir rol oynar.
Miras, bir sınıfın üst sınıfından aldığı özellikleri ve metodları kullanarak alt sınıfının işlevselliğini arttırır. Bir sınıf üst sınıfında bulunmayan özellik ve metodları ekleyebilirken, aynı zamanda üst sınıfındaki özelliklerin üzerine yazarak değiştirebilir. Bu sayede alt sınıfı, üst sınıfından farklı bir işlevsellik kazanabilir. Miras, sınıfların daha organize ve yönetilebilir bir şekilde kullanılmasını sağlar.
- Bir sınıfın diğer sınıflardan özelliklerini ve metodlarını aktarması
- Mevcut bir sınıfın kod tekrarından kaçınmayı sağlar
- Kodun yeniden kullanımını kolaylaştırır
- Alt sınıfın işlevselliğini artırır
- Alt sınıfın farklı bir işlevsellik kazanmasını sağlar
- Sınıfların daha organize ve yönetilebilir bir şekilde kullanılmasını sağlar
Mirasın kullanımı, programın niteliğine göre değişebilir. Ancak, sağladığı faydalar nedeniyle, neredeyse her proje miras kullanımı gerektirir. Sınıflar arasında tek yönlü bir ilişki kurulduğu için, bir sınıfın değiştirilmesi, diğer sınıfları etkilemez.
Çok Biçimlilik
Çok biçimlilik, programcının nesnelerin farklı şekillerde davranmasını sağlayan, öğrenmesi kolay ve kullanması kolay bir yazılım tasarım prensibidir. Bu prensip, Python’da sınıfların üzerinde kullanabileceğimiz birçok farklı programlama tekniği ile uygulanabilir.
Çok biçimlilik, aynı adı taşıyan farklı işlevlere sahip yöntemlerin veya sınıfların oluşturulabilmesine olanak tanır. Bu, programcıların ihtiyaçlarına göre sınıfları küçük parçalara ayırmalarını ve daha sonra bu parçaları daha fazla özelleştirerek kullanmalarını sağlar.
Örneğin, bir hayvan sınıfı oluşturduğumuzu varsayalım. Bu sınıfın altında köpek, kedi ve kuş sınıfları oluşturabiliriz. Her sınıf, türlerinin farklı özelliklerini taşıyan benzersiz yöntemleri ve özellikleriyle birbirinden farklı olacaktır. Ancak, hepsi hayvan sınıfının yöntemleri ve özellikleri tarafından paylaşılan bir temel yapıcı metod ile açıklanabilir.
Çok biçimlilik, Python’da sınıfları ve alt sınıfları kendi ihtiyaçlarınıza göre özelleştirerek, daha modüler ve esnek bir kodlama ortamı oluşturmanıza olanak tanır. Ayrıca, kodun okunaklılığına da katkıda bulunur ve işlevselliği geliştirir.