Bu derste python'da sınıflar, yapıcılar ve kalıtım hakkında bilgi edineceğiz.
Bu kavramlar, farklı türlerin tanımlanmasının gerekli olduğu büyük bir programda gerçekten önemlidir.
Sınıflar
Sınıflar programlamada önemlidir ve python'a özgü değildir. Diğer birçok Programlama dilleri sınıf kavramını destekler. Yeni veri türlerini tanımlamak için sınıfları kullanırız.
Şimdiye kadar Python'daki sayılar, diziler ve boolean gibi temel veri türlerini öğrendik. Bunlar Python'daki temel veya basit veri türleridir. Ayrıca listeler ve sözlükler gibi birkaç karmaşık veri türü gördük.
Bu türler son derece kullanışlı olmakla birlikte, karmaşık kavramları modellemek için her zaman kullanılamazlar. Örneğin, bir nokta veya bir alışveriş sepeti fikrini düşünün. Bir alışveriş sepeti bir boolean veya bir liste değildir. Farklı bir veri türüdür. Böylece gerçek kavramları modellemek için yeni türler tanımlamak için sınıfları kullanabiliriz.
Şimdi nokta adında yeni bir veri tipi tanımlayalım. Bu yeni tür, daha önce kontrol ettiğimiz gibi yöntemlere sahip olacak.
Bunu şu şekilde yapacaksınız:
“class” anahtar sözcüğünü kullanarak bir sınıf tanımlayarak başlıyoruz ve hemen ardından sınıfımıza bir isim veriyoruz.
class Point
Şimdi, burada kullandığım adlandırma kuralına bakın. Buradaki ilk harfi büyük yazdım, buna pascal adlandırma kuralı diyoruz. Bu kural, değişkenlerimizi adlandırmak için kullandığımız ve her zaman küçük harfler kullandığımız ve birden çok kelimeyi bir alt çizgi ile ayırdığımız işlevlerden farklıdır. Ancak sınıfları adlandırırken, birden çok kelimeyi ayırmak için alt çizgi kullanmıyoruz, her kelimenin ilk harfini büyük yapıyoruz.
Sınıfımızı tanımladıktan sonra iki nokta üst üste kullanılır, bu da artık bir bloğun tanımlandığı anlamına gelir.
class Point:
def move (self):
Bu blokta noktalara ait tüm fonksiyonları veya metotları tanımlayabiliriz. Örneğin bir noktayı hareket ettirmek için “move” adında bir fonksiyon tanımlayabiliriz. Parantez açar açmaz PyCharm'ın buraya otomatik olarak "self" eklediğini unutmayın. Bu özel bir anahtar kelimedir ve kısa süre içinde buna geri dönmeme izin verin. Terminalde “move” yazalım.
print("move")
“Çiz” gibi başka bir yöntem tanımlayalım ve terminale yazdıralım.
def draw(self):
print("draw")
“Nokta” sınıfımızın tanımıyla işimiz bitti. Bu yeni tip ile yeni nesneler oluşturabiliriz. Bir sınıf basitçe, o plana dayalı gerçek örnekler olan nesneleri oluşturmak için planı veya şablonu tanımlar. Bir nesne yaratmak için sınıfımızın adını yazıp onu bir fonksiyon gibi çağırırız. Bu, yeni bir nesne oluşturur ve sonra onu döndürür. Sonra bu nesneyi bir değişkende saklayabiliriz. Sana göstereyim:
Burada üç boyutlu bir nokta olan bir “nokta1” tanımladık. Bunu görebilirsiniz, terminalde bireysel koordinatları yazdırabiliriz.
Bu noktada “draw” ve “move” olmak üzere iki yöntemi kullanabiliriz.
Özetlemek gerekirse, yeni türler tanımlamak için sınıfları kullanıyoruz ve bu türler, sınıfın gövdesinde tanımladığımız yöntemlere sahip olabilir. Sınıflar, programlarımızda herhangi bir yerde ayarlayabileceğimiz niteliklere sahip olabilir.
Kurucular
Şimdiye kadar sınıfları kullanarak yeni türlerin nasıl oluşturulacağını öğrendik. Şimdi bu uygulamada küçük bir sorun var. Sınıfları kullanarak x veya y koordinatı olmayan bir nokta nesnesi oluşturabiliriz ve bu ideal değildir. Sana göstereyim.
x koordinatını ayarlamadan önce bir nokta oluşturalım ve yazdıralım. Programımızı çalıştırmak aşağıdaki gibi bir öznitelik hatasıyla sonuçlanır:
Bu, nokta nesnesinin x adında bir niteliği olmadığı anlamına gelir. Şimdi sorun, x veya y koordinatları olmayan bir nokta nesnesine sahip olmanın mümkün olmasıdır. Bu bir anlam ifade etmiyor, çünkü ne zaman bir nokta hakkında konuşsak, o noktanın nerede olduğunu bilmemiz gerekiyor. Bu sorunu çözmek için bir kurucu kullanıyoruz. Yapıcı, bir nesne oluşturulurken çağrılan bir işlevdir.
Bir yapıcıyı nasıl kullandığımız aşağıda açıklanmıştır. İlk olarak yukarıdaki programda x ve y koordinat değerlerini geçelim.
point = Point(10, 20)
print(point.x)
Şimdi, bu sınıfa yapıcı adı verilen özel bir yöntem eklememiz gerekiyor. Sözdizimi şöyledir:
def __init__(self, x, y):
init
başlatıldı için kısadır ve bu, yeni bir nokta nesnesi oluşturulduğunda çağrılan işlev veya yöntemdir. x ve y hemen sonra eklenir self
iki ekstra parametre eklemek için.
Bundan sonra, x ve y'yi geçen değerlerle, yani 10 ve 20 ile eşleştirmeliyiz.
self.x = x
self.y = y
Biz kullanın self
geçerli nesneye atıfta bulunmak için ve ardından x niteliğini “x” işlevine iletilen x argümanına ayarladık. Bu şekilde, kullanarak init
yöntemiyle nesnelerimizi başlatabiliriz. Bu yönteme kurucu denir. Programımızı çalıştıralım.
Şimdi x ve y koordinatlarını daha sonra değiştirebiliriz. x koordinatını güncelleyelim:
point = Point(10, 20)
point.x = 11
print(point.x)
Şimdi, x koordinatı 11 değerine güncellendi.
Egzersiz
İşte size ilginç bir egzersiz.
Kişi adında yeni bir tür tanımlamanızı istiyorum. Bu “Kişi” nesnelerinin bir “name
” özelliğinin yanı sıra bir “talk()
" yöntem.
Bu basit bir iştir ve birkaç dakikadan fazla sürmemelidir.
Çözüm
“Kişi” sınıfını şu şekilde tanımlayarak başlayın:
class Person:
self.name = name
Yapıcıyı daha sonra tanımlayacağız. Artık “Person” nesnesini oluşturabiliriz. John diyelim
john = Person("John Smith")
print(john.name)
john.talk()
Şimdi kodun ilk kısmına geçin ve bir kurucu oluşturun.
def __init__(self, name):
Son kod şöyle görünecek:
Ayrıca biçimlendirilmiş dizeleri ve diğer kavramları sınıflar ve oluşturucularla birlikte kullanabilirsiniz.
miras
Kalıtım, bir kodu yeniden kullanmanıza izin veren sınıflarla ilişkili başka bir kavramdır.
Bu kod parçasını düşünün.
class Dog:
def walk(self):
print("walk")
“Yürüme” yöntemiyle bir “Köpek” sınıfı oluşturduk. Bu yöntemde, sadece yürüyüş mesajını terminalde yazdırıyoruz. Diyelim ki gerçek bir programda, burada sadece bir satır yerine 10 satır kod var. Gelecekte, “walk” yöntemine sahip olmak için başka bir sınıfa ihtiyaç duyulursa, tüm bu kodu tekrarlamamız gerekecek. Bu ideal değil.
Programlamada DRY diye bir ilkemiz var, kendinizi tekrar etmeyin anlamına gelir. Diyelim ki gelecekte bir zaman, “yürüme” yöntemimizde bir sorun keşfettik ve bu yöntemi başka birçok yerde tekrar ettiysek veya çoğalttıysak, bunu çoğalttığımız her yerde geri gelip bu sorunu düzeltmemiz gerekecek. kod. Bu yüzden programlamada bir şeyi iki kez tanımlamamalıyız.
Bu sorunu çözmek için farklı yaklaşımlar var ama burada yeni başlayanlar için daha kolay olanı öğreneceğiz ve buna kalıtım denir. Bu durumda başka bir “memeli” sınıfı oluşturacağız ve o sınıfta “walk” niteliğimizi tanımlayacağız.
class Mammal:
def walk(self):
print("walk")
“Mammal” sınıfımızı tanımladıktan sonra, kalıtımı aşağıdaki gibi öznitelikleri iletmek için kullanabiliriz:
Hem köpek hem de kedi sınıfları, üst sınıflarında tanımlanan tüm sınıf yöntemlerini devralır. Şimdi bunun gibi köpeklere özel yöntemler ekleyebiliriz:
class Dog:
def bark(self):
print("bark")
Sarmak!
Bu tamamen sınıflar, yapıcılar ve kodun kalıtım konseptli sınıflarda yeniden kullanılmasıyla ilgiliydi. Artık serimizin sonuna yaklaşıyoruz. Bu noktada Python'da iyi, okunabilir ve özlü kodlar üretebilmelisiniz.
Modül ve paket kavramını bir sonraki derste göreceğiz.
Yorum bırak