Python Nesne Yönelimli Programlama
Bu eğitimde, Python’da Nesne Yönelimli Programlama (OOP) ve temel kavramını örnekler yardımıyla öğreneceksiniz.
Nesne yönelimli programlama
Python çok paradigmalı bir programlama dilidir. Farklı programlama yaklaşımlarını destekler.
Bir programlama problemini çözmenin popüler yaklaşımlarından biri nesneler yaratmaktır. Bu, Nesne Yönelimli Programlama (OOP) olarak bilinir.
Bir nesnenin iki özelliği vardır:
- Öznitellikler
- davranış
Bir örnek verelim:
Bir papağan, aşağıdaki özelliklere sahip olduğu için bir nesnedir:
- nitelik olarak isim, yaş, renk
- davranış olarak şarkı söylemek, dans etmek
Python’daki OOP kavramı, yeniden kullanılabilir kod oluşturmaya odaklanır. Bu kavram KURU (Kendini Tekrar Etme) olarak da bilinir.
Python’da OOP kavramı bazı temel ilkeleri takip eder:
Sınıf
Sınıf, nesne için bir plandır.
Sınıfı, etiketli bir papağan taslağı olarak düşünebiliriz. Adı, rengi, boyutu vb. ile ilgili tüm detayları içerir. Bu açıklamalara dayanarak papağan hakkında çalışma yapabiliriz. Burada papağan bir nesnedir.
Papağan sınıfı için örnek şunlar olabilir:
1 2 | sınıf Papağan: geçmek |
Burada class
boş bir sınıf tanımlamak için anahtar kelimeyi kullanıyoruz.Papağan. Sınıftan örnekler oluşturuyoruz. Örnek, belirli bir sınıftan oluşturulan belirli bir nesnedir.
Nesne
Bir nesne (örnek), bir sınıfın somutlaştırılmasıdır. Sınıf tanımlandığında, yalnızca nesnenin tanımı tanımlanır. Bu nedenle, bellek veya depolama tahsis edilmez.
Papağan sınıfının nesnesi için örnek şunlar olabilir:
1 | obj = Papağan() |
Burada,nesnesınıfın bir nesnesidir Parrot
.
Diyelim ki papağanlarla ilgili detaylarımız var. Şimdi papağanların sınıf ve nesnelerinin nasıl oluşturulacağını göstereceğiz.
Örnek 1: Python’da Sınıf ve Nesne Oluşturma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Parrot: # class attribute species = "bird" # instance attribute def __init__(self, name, age): self.name = name self.age = age # instantiate the Parrot class blu = Parrot("Blu", 10) woo = Parrot("Woo", 15) # access the class attributes print("Blu is a {}".format(blu.__class__.species)) print("Woo is also a {}".format(woo.__class__.species)) # access the instance attributes print("{} is {} years old".format( blu.name, blu.age)) print("{} is {} years old".format( woo.name, woo.age)) |
Çıktı
1 2 3 4 | <samp>Blu bir kuş Woo da bir kuş Blu 10 yaşında Woo 15 yaşında</samp> |
Yukarıdaki programda, adında bir sınıf oluşturduk.Papağan. Daha sonra öznitelikleri tanımlıyoruz. Nitelikler, bir nesnenin bir özelliğidir.
__init__
Bu nitelikler , sınıfın yöntemi içinde tanımlanır . Nesne oluşturulur oluşturulmaz ilk çalıştırılan başlatıcı yöntemidir.
Ardından, örneklerini oluşturuyoruzPapağansınıf. Burada,mavivewooyeni nesnelerimize referanslardır (değer).
kullanarak class niteliğine erişebiliriz __class__.species
. Sınıf nitelikleri, bir sınıfın tüm örnekleri için aynıdır. blu.name
Benzer şekilde, ve kullanarak örnek özniteliklerine erişiriz blu.age
. Ancak, bir sınıfın her örneği için örnek nitelikleri farklıdır.
Sınıflar ve nesneler hakkında daha fazla bilgi edinmek için Python Sınıfları ve Nesneleri’ne gidin.
yöntemler
Yöntemler, bir sınıfın gövdesi içinde tanımlanan işlevlerdir. Bir nesnenin davranışlarını tanımlamak için kullanılırlar.
Örnek 2: Python’da Metot Oluşturma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Parrot: # instance attributes def __init__(self, name, age): self.name = name self.age = age # instance method def sing(self, song): return "{} sings {}".format(self.name, song) def dance(self): return "{} is now dancing".format(self.name) # instantiate the object blu = Parrot("Blu", 10) # call our instance methods print(blu.sing("'Happy'")) print(blu.dance()) |
Çıktı
1 2 | <samp>Blu 'Mutlu' şarkısını söylüyor Blu şimdi dans ediyor</samp> |
Yukarıdaki programda iki yöntem tanımlıyoruz, yani sing()
ve dance()
. Bunlara örnek yöntemler denir, çünkü bunlar bir örnek nesne üzerinde çağrılır, yani blu
.
Miras
Kalıtım, mevcut bir sınıfın ayrıntılarını değiştirmeden kullanmak için yeni bir sınıf oluşturmanın bir yoludur. Yeni oluşturulan sınıf, türetilmiş bir sınıftır (veya alt sınıf). Benzer şekilde, mevcut sınıf bir temel sınıftır (veya ana sınıftır).
Örnek 3: Python’da Kalıtımın Kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # parent class class Bird: def __init__(self): print("Bird is ready") def whoisThis(self): print("Bird") def swim(self): print("Swim faster") # child class class Penguin(Bird): def __init__(self): # call super() function super().__init__() print("Penguin is ready") def whoisThis(self): print("Penguin") def run(self): print("Run faster") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run() |
Çıktı
1 2 3 4 5 | <samp>kuş hazır penguen hazır Penguen Daha hızlı yüzün Daha hızlı koş</samp> |
Yukarıdaki programda iki sınıf oluşturduk, yaniKuş(ebeveyn sınıfı) vePenguen(çocuk sınıfı). Alt sınıf, ana sınıfın işlevlerini devralır. Bunu swim()
yöntemden anlayabiliriz.
Yine, alt sınıf, üst sınıfın davranışını değiştirdi. Bunu whoisThis()
yöntemden anlayabiliriz. run()
Ayrıca, yeni bir metot oluşturarak ebeveyn sınıfın fonksiyonlarını genişletiyoruz .
Ek olarak, yöntemin super()
içindeki işlevi kullanıyoruz. Bu , ebeveyn sınıfın yöntemini alt sınıf içinde __init__()
çalıştırmamıza izin verir .__init__()
kapsülleme
Python’da OOP kullanarak yöntemlere ve değişkenlere erişimi kısıtlayabiliriz. Bu, verilerin kapsülleme adı verilen doğrudan değiştirilmesini önler. Python’da, önek olarak alt çizgi kullanarak özel nitelikleri belirtiriz, yani tek _
veya çift __
.
Örnek 4: Python’da Veri Kapsülleme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Selling Price: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # change the price c.__maxprice = 1000 c.sell() # using setter function c.setMaxPrice(1000) c.sell() |
Çıktı
1 2 3 | <samp>Satış Fiyatı: 900 Satış Fiyatı: 900 Satış Fiyatı: 1000</samp> |
Yukarıdaki programda, bir tanımladıkBilgisayarsınıf.
__init__()
Maksimum satış fiyatını saklamak için yöntemi kullandık Computer
. İşte, koda dikkat edin
1 | c.__maxprice = 1000 |
Burada, değerini değiştirmeye çalıştık.__maksimum fiyatsınıfın dışında. Ancak, o zamandan beri__maksimum fiyatprivate bir değişkendir, bu değişiklik çıktıda görülmez.
Gösterildiği gibi, değeri değiştirmek için setMaxPrice()
parametre olarak fiyatı alan bir ayarlayıcı işlevi kullanmalıyız.
polimorfizm
Polimorfizm, çoklu formlar (veri türleri) için ortak bir arabirim kullanma yeteneğidir (OOP’de).
Diyelim ki bir şekli renklendirmemiz gerekiyor, birden fazla şekil seçeneği var (dikdörtgen, kare, daire). Ancak aynı yöntemi herhangi bir şekli renklendirmek için kullanabiliriz. Bu kavram Polimorfizm olarak adlandırılır.
Örnek 5: Python’da Polimorfizmi Kullanma
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Parrot: def fly(self): print("Parrot can fly") def swim(self): print("Parrot can't swim") class Penguin: def fly(self): print("Penguin can't fly") def swim(self): print("Penguin can swim") # common interface def flying_test(bird): bird.fly() #instantiate objects blu = Parrot() peggy = Penguin() # passing the object flying_test(blu) flying_test(peggy) |
Çıktı
1 2 | <samp>Papağan uçabilir penguen uçamaz</samp> |
Yukarıdaki programda iki sınıf tanımladıkPapağanvePenguen. Her birinin ortak bir fly()
yöntemi var. Ancak işlevleri farklıdır.
Polimorfizmi kullanmak için ortak bir arayüz oluşturduk, yani herhangi bir nesneyi alan ve nesnenin yöntemini flying_test()
çağıran fonksiyon . fly()
Böylece, geçiş yaptığımızdamavivepeggyişlevdeki nesneler, flying_test()
etkili bir şekilde çalıştı.
Hatırlanması Gereken Önemli Noktalar:
- Nesneye Yönelik Programlama, programın anlaşılmasını kolay ve verimli hale getirir.
- Sınıf paylaşılabilir olduğundan kod yeniden kullanılabilir.
- Veri soyutlama ile veriler güvenli ve emniyetlidir.
- Polimorfizm, farklı nesneler için aynı arabirime izin verir, böylece programcılar verimli kod yazabilir.