Atıl Samancıoğlu’nun verdiği Python 100 Günlük Programlama Kampın’dan aldığım notlar 📄
Eğitim’e ulaşmanız için linki buraya bırakıyorum ⤵️
Python 2025 : 100 Günlük Programlama Kampı
#Değişken Nedir?
İçerilerinde veri tutabilen yapılara değişken denir. Değişken verileri ramde saklar.
age = 10
# Bundan sonra Age'i bana 10 olarak getirir her zaman.
#Veri Tipleri Nedir?
Veri tipleri, bir programlama dilinde kullanılan verilerin türlerini belirleyen yapısal özelliklerdir.
type(10)
# Kodu çalıştırdığımızda bize parantez içindeki değerin tipini söyler.
# Veri tipi int ⇒ Tam Sayı
type(3.14)
# Kodu çalıştırdığımızda bize parantez içindeki değerin tipini söyler.
# Veri tipi float ⇒ Ondalıklı Sayı
Python'da diğer bazı programlama dillerinden farklı olarak, iki tam sayı (integer) bölündüğünde sonuç her zaman float (ondalıklı sayı) olur. Bu durum yalnızca bölme işlemi (/) için geçerlidir.
Farklı İşlemler
2 ** 5
# Bu işlem üssü tanımlar, 2 üzerin 5 olarak tanımlar.
10 % 3
# Bu işlem ise işlemden kalanını bulmamızı sağlar.
#String Nedir?
Metinsel değerlerin veri tiplerine string denir. Pythonda string tek veya çift tırnak içerisinde belirtilir.
'Meercat's restaurant'
# çift tırnak bu tür durumlarda kullanmak daha mantıklıdır.
"Meercat's restaurant"
Escape Characters
print("Meercat's \nrestaurant") #/n'den sonra gelen kısmı yeni satırda yazdırır.
#/n => newline
print("Meercat's \trestaurant")#/t yazılan yere bir tablık boşluk bırakır.
#/t => tab
#String Metotları
String metotları ise str (string) veri tipine ait özel fonksiyonlardır. Bunlar, metin üzerinde işlem yapmamızı sağlayan hazır fonksiyonlardır.
capitalize() ⇒ String’in ilk karakterini büyük harfe çevirir.
count() ⇒ String’de bulunan herhangi bir değerin, kaç adet bulunduğunu gösterir.
upper() ⇒ String’in tüm karakterlerini büyük harfe çevirir.
Bu metotlarda bilmediğimiz bir metodun ne işe yaradığını öğrenmek için help fonksiyonunu kullanırız.
help(name.count)
#İndex Nedir?
Programlamada indeks, bir dizilimdeki (metin veya liste gibi) her bir öğeye, örneğin bir karaktere, karşılık gelen ve ilk öğe için 0'dan başlayarak atanan sayısal bir konum belirtecidir.
myString[x] # myString içerisinden, indeksi 'x' olan karakteri getirir.
Python'da, myName gibi bir string'in veya benzeri bir sıralı veri tipinin son karakterine/öğesine erişmek istediğimizde iki yaygın yöntem kullanabiliriz: ya veri tipinin toplam uzunluğunu (len(myName)) bulup bundan 1 çıkararak son elemanın indeksini (myName[len(myName)-1]) hesaplarız ya da Python'un sunduğu pratik negatif indeksleme kolaylığından faydalanarak doğrudan myName[-1] yazarız.
#Slicing Nedir?
Bir veri yapısından istediğiniz bir parçayı almanızı sağlar.
veri_yapisi[başlangıç:bitiş:kaçarkaçarilerleyelim]
başlangıç (start): Alınacak parçanın başlayacağı indeks numarasıdır. Bu indeksteki eleman parçaya dahil edilir.
bitiş (stop): Alınacak parçanın biteceği indeks numarasıdır. Bu indeksteki eleman parçaya dahil edilmez. Eğer belirtilmezse, varsayılan olarak dizilimin sonuna kadar gidilir.
adım (step): Parça alınırken elemanlar arasında atlanacak mesafeyi belirtir. Örneğin 2 yazılırsa, bir eleman alınıp bir eleman atlanır. Eğer belirtilmezse, varsayılan olarak 1 kabul edilir (yani tüm elemanlar sırayla alınır).
[::-1] kestirmesi, bir dizilimi ters çevirmenin Python'daki yaygın ve kısa bir yoludur.
#Liste Nedir?
Liste (list), Python'da birden fazla öğeyi (sayı, metin, başka listeler vb.) tek bir isim altında toplamanızı sağlayan, sıralı ve değiştirilebilir bir veri yapısıdır. Öğeler köşeli parantez [] içine virgülle ayrılarak yazılır.
metin = "Merhaba"
# metin[0] = "A" # Bu satır HATA verir (TypeError), çünkü string'ler immutable'dır.
Ama, listeler değiştirilebilir (mutable) veri yapıları olduğu için, bir listenin belirli bir indeksindeki öğeyi (elemanı) doğrudan değiştirebiliriz.
meyveler = ["elma", "armut", "muz"]
print("Önce:", meyveler)
#Çıktı:
Önce: ['elma', 'armut', 'muz']
# 1. indeksteki "armut" öğesini "kiraz" ile değiştirelim
meyveler[1] = "kiraz"
print("Sonra:", meyveler)
#Çıktı:
Sonra: ['elma', 'kiraz', 'muz']
#Liste Özellikleri
append(oge): Listenin sonuna tek birogeekler. Listeyi yerinde değiştirir..count(deger): Listede belirtilendeger'in kaç kere geçtiğini sayar ve bu sayıyı (bir tam sayı) döndürür. Listeyi değiştirmez..insert(indeks, oge): Belirtilenindekskonumunaoge'yi ekler. O indeksteki ve sonraki öğeler sağa kaydırılır. Listeyi yerinde değiştirir..pop(): metodunu parantez içine hiçbir indeks numarası yazmadan çağırırsanız (liste.pop()şeklinde), varsayılan olarak listenin en sonundaki öğeyi listeden çıkarır..remove(deger): Listede bulunan ilkdeger'i bulur ve siler..reverse(): Listenin öğe sırasını tersine çevirir (baştakini sona, sondakini başa vb.). Listeyi yerinde değiştirir.sort(key=None, reverse=False): Listenin öğelerini yerinde sıralar. Varsayılan olarak küçükten büyüğe (sayılar için) veya alfabetik (string'ler için) sıralar.
#Veri Tipine Dönüştürme
Veri tipine dönüştürme (Type Conversion veya Type Casting), bir değişkende veya değerde saklanan verinin tipini başka bir veri tipine çevirme işlemidir.
Farklı İşlemler İçin: Matematiksel işlem yapmak için metin (string) olarak alınmış bir sayıyı tam sayı (int) veya ondalık sayıya (float) çevirmek gerekebilir. Ya da bir sayıyı metinle birleştirmek için string'e (str) dönüştürmek gerekebilir.
Kullanıcı Girdisi: Kullanıcıdan input() fonksiyonu ile alınan veriler her zaman metin (string) tipindedir. Eğer kullanıcıdan sayı girmesini istediysek, bu metni sayısal bir tipe (örn. int) dönüştürmemiz gerekir.
#İleri Seviye Listeler
floatlist(Float Listesi): Elemanlarının çoğunlukla ondalık sayı (float) olduğu standart bir Python listesidir.mixedlist(Karışık Liste): İçinde tam sayı, metin, ondalık sayı gibi birden fazla farklı veri tipini barındırabilen standart Python listesidir.- Listelerde Toplama İşlemi (
+): İki listeyi+ile birleştirdiğinizde (concatenation), elemanları uç uca eklenerek yeni bir liste oluşur. - Listelerde Çarpma İşlemi (
*): Bir listeyi bir tam sayı ile kullanarak çarptığınızda, liste içeriği o sayı kadar tekrarlanarak yeni bir liste oluşur (repetition). nestedlist(İç İçe Liste): Bir listenin elemanlarının da liste olması durumudur. Genellikle matris gibi çok boyutlu yapıları temsil etmek için kullanılır.
#Sözlükler Nedir?
- Anahtar-Değer Çiftleri: Sözlükler, verileri anahtar (key) ve ona karşılık gelen değer (value) olarak çiftler halinde saklayan bir koleksiyondur. Tıpkı gerçek bir sözlükteki kelime (anahtar) ve anlamı (değer) gibi düşünebiliriz.
# Bir öğrenci bilgilerini içeren bir sözlük oluşturalım
ogrenci = {
"ad": "Ahmet",
"soyad": "Yılmaz",
"numara": 123,
"aktif_mi": True,
"dersler": ["Matematik", "Fizik"]
}
# Python da bu anahtarı bulup ona karşılık gelen "Ahmet" değerini döndürüyor.
- Sözlüklerde
ogrenci["ad"]yazdığımızda, Python'dan şunu istiyoruz: "ogrencisözlüğünün içine bak,"ad"etiketine (anahtarına) sahip olan değeri bana getir. - Sözlük tanımlarken değerler için hiçbir tip kısıtlaması yokken, anahtarların değiştirilemez (immutable) olması yeterlidir. Bu sayede
int:int,string:string,int:string,float:list,tuple:dictgibi çok çeşitli kombinasyonlarda sözlükler oluşturabiliriz.
#Sözlük Methodları
get()Methodu- Bir anahtarın değerini güvenli bir şekilde (hata almadan) almak için.
- Eğer verdiğiniz anahtar sözlükte varsa, o anahtarın değerini döndürür (tıpkı
insan["isim"]gibi). - İsteğe bağlı olarak ikinci bir argüman verebilirsiniz. Eğer anahtar bulunamazsa,
Noneyerine bu belirttiğiniz varsayılan değeri döndürür.
PythonkisiDict = {"isim": "Zeynep", "yas": 25} kisiDict.get("sehir", "Bilinmiyor") # .get("sehir", "Bilinmiyor") ifadesi, sözlükte "sehir" anahtarı olmadığı için "Bilinmiyor" değerini döndürür
keys()Sadece anahtarları almak için.values(): Sadece değerleri almak için.
#Set Nedir?
- Setler, sırasız, benzersiz elemanlardan oluşan koleksiyonlardır. Özellikle eleman varlığını kontrol etme, tekrarları kaldırma ve küme işlemleri için çok kullanışlıdırlar.
# Tekrarlı liste:
countryList = ["de", "fr", "tr", "fr", "tr", "tr", "de", "nl", "de", "tr"]
# Sete çevirince tekrarlar gider:
set(countryList)
#çıktı {'nl', 'de', 'fr', 'tr'}
Satış yapılan ülkelerin listesi (countryList) içinde aynı ülkeler tekrar tekrar yazıyor ("tr", "de" gibi). Hangi farklı ülkelere satış yapıldığını görmek için bu listeyi set() ile sete çeviriyoruz.
#Set Methodları
.union(diger_setler): Çağırdığın set ile parantez içine yazdığın diğer setlerdeki bütün farklı elemanları bir araya getirir ve yeni bir set oluşturur. Kısaca: Hepsini tekrarsız birleştirir..intersection(diger_setler): Çağırdığın set ile parantez içine yazdığın diğer setlerin hepsinde ortak olan elemanları bulur ve yeni bir set oluşturur. Kısaca: Sadece ortak olanları alır.
not
Boş set oluşturmak için set() kullanman gerekiyor, çünkü: Python, boş süslü parantezi {} varsayılan olarak boş bir sözlük (dictionary) olarak yorumlar, boş bir set olarak değil. Bu yüzden boş set için bos_set = set() demek zorundayız.
#Tuple Nedir?
Tuple (()): Listelere benzeyen, sıralı bir veri yapısıdır ama en önemli farkı değiştirilemez (immutable) olmasıdır.
Kütüphaneler, değişmez oldukları için sabit verileri veya fonksiyonlardan dönen çoklu sonuçları güvenle tuple olarak kullanır.
#Bool Nedir?
bool: Sadece True (Doğru) veya False (Yanlış) değerini alabilen, mantıksal durumları belirten veri tipidir.
not
and(ve): Hepsi doğru olmak zorunda.or(veya): Bir tanesi bile doğru olsa yeter.not(değil): Sonucu tersine çevirir (Doğru ise Yanlış, Yanlış ise Doğru yapar).in(içinde)
Bir elemanın bir listenin veya metnin içinde olup olmadığını kontrol eder.
#If Kontrolleri Nedir?
if kontrolü, bir programın akıllı karar verme mekanizmasıdır. Belirli bir koşulun doğru (True) veya yanlış (False) olup olmadığını değerlendirir. Eğer koşul doğruysa, kod bloğu içindeki işlemler çalıştırılır; yanlışsa, bu işlemler atlanır ve program akışı devam eder.
my_superhero = "Batman"
# 'my_superhero' değişkeni "Batman" olarak tanımlandı.
if my_superhero == "Batman" :
print("x")
# 'my_superhero' değişkeni "Batman"e eşit olduğu için koşul doğru.
# Bu nedenle "x" çıktısı ekrana yazdırılır.
elif elif, Python'da "else if"in kısaltmasıdır. Bir if koşulu yanlış olduğunda, başka bir koşulu kontrol etmek için kullanılır.else, if ve elif koşullarının hiçbiri doğru olmadığında çalışan son bloğu belirtir. Diğer bir deyişle, tüm diğer koşulların yanlış olduğu "aksi takdirde" durumunu ifade eder.
my_superhero = input("enter superhero: ")
# Kullanıcıdan bir süper kahraman adı girmesini istiyor ve bu değeri 'my_superhero' değişkenine atıyor.
if my_superhero == "Iron-Man":
print("Iron-Man")
# Eğer girilen değer "Iron-Man" ise, iron-man çıktısını alırız.
elif my_superhero == "Aquaman":
print("Aquaman")
# 'if' koşulu sağlanmazsa ve girilen değer "Aquaman" ise, aquaman çıktısını alırız.
else:
print(":(")
# Yukarıdaki hiçbir koşul sağlanmazsa (ne "Iron-Man" ne de "Aquaman"), çıktıda :( ifadesini alırız.
#Döngüler Nedir?
for döngüsü, bir kod bloğunu belirli bir sayıda veya belirli bir koleksiyondaki her eleman için tekrar tekrar çalıştırmanın bir yoludur.
for num in my_list:
print(num / 5 *2)
# my_list içindeki her bir sayıyı 5'e bölüp 2 ile çarparak ekrana yazdırır.
Bir döngüyü tamamen sonlandırmak için kullanılır. break komutu çalıştırıldığında, program döngüden çıkar.
for num in my_list:
print(num)
if num == 40:
print("yes")
break
# 'break' komutu döngüyü tamamen sonlandırır ve program bu satırdan çıkar.
Döngünün mevcut adımını atlayıp, bir sonraki adıma geçmesini sağlar. continue komutundan sonraki kodlar o adım için çalıştırılmaz, ancak döngü devam eder.
for num in my_list:
print(num)
if num == 40:
continue
print("yes")
# 'continue' sonrası bu satır atlanır ve döngü bir sonraki elemana geçer.
# Bu nedenle "yes" çıktısı asla ekrana yazdırılmaz.
pass, Python'da hiçbir şey yapmayan boş bir komuttur. Söz dizimi gerektiren ancak şimdilik boş bırakılacak kod bloklarında yer tutucu olarak kullanılır.
for num in my_list:
pass
while döngüsü, bir koşul doğru (True) olduğu sürece belirli bir kod bloğunu tekrarlamak için kullanılır. Koşul yanlış (False) olduğunda döngü sona erer.
# x değişkeni 10'dan küçük olduğu sürece döngü devam eder.
while x < 10:
# x'in o anki değerini ekrana yazdır
print(x)
# Her döngüde x'in değerini 1 artır.
x = x + 1
range(), belirli bir başlangıç ve bitiş noktası arasında bir sayı dizisi oluşturmak için kullanılır.
list(range(5,25))
# çıktı
# [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
random kütüphanesi, Python'da rastgele sayılar ve rastgele seçimler yapmak için kullanılan bir modüldür. Oyunlardan bilimsel simülasyonlara kadar birçok alanda rastgeleliğe ihtiyaç duyulduğunda kullanılır.
from random import randint
randint(), random kütüphanesinden, belirtilen iki sayı arasındaki (bu sayılar dahil) rastgele bir tam sayıyı seçmeye yarayan bir fonksiyondur.
randint(0,100)
# çıktı
# 73
shuffle(), bir listenin öğelerinin sırasını rastgele karıştırmak için kullanılır.
print(my_list)
# çıktı
# [20, 30, 40, 50, 60]
shuffle(my_list)
# shuffle kullanarak my_list'in değerlerini karıştırıyoruz.
print(my_list)
# çıktı
# [50, 60, 40, 20, 30]
zip(), birden fazla yinelenebilir (iterable) nesneyi (örneğin, listeleri) birleştirerek, her birinden gelen öğeleri bir tuple içinde gruplamanızı sağlayan bir fonksiyondur.
food_list = ["apple", "banana", "melon"]
calories_list = [100, 200, 300]
day_list = ["monday", "tuesday", "wednesday"]
zipped_list = list(zip(food_list,calories_list,day_list))
print(zipped_list)
# çıktı
# [('apple', 100, 'monday'),('banana', 200, 'tuesday'),('melon', 300, 'wednesday')]
#List Comprehension Nedir?
Python'da listeleri tek bir satırda, daha kısa ve okunabilir bir şekilde oluşturmak için kullanılan güçlü bir yapıdır. Normalde bir for döngüsü ve append metodu ile yapılan işlemleri çok daha pratik hale getirir.
new_list = []
my_string = "TheWeeknd"
for element in my_string:
new_list.append(element)
print(new_list)
# çıktı
# ['T', 'h', 'e', 'W', 'e', 'e', 'k', 'n', 'd']
new_list = [element for element in my_string]
print(new_list)
# çıktı
# ['T', 'h', 'e', 'W', 'e', 'e', 'k', 'n', 'd']
#Fonksiyonlar Nedir?
Fonksiyon, belirli bir görevi yerine getirmek için tasarlanmış, yeniden kullanılabilir kod bloğudur.
# python'da bir fonksiyon tanımlamak için def anahtar kelimesi (keyword) kullanırız.
def hello_python():
print("hello")
# hello_python fonksiyonuna belirli bir kod bloğu tanımladık.
hello_python()
# çıktı
# hello
return, bir fonksiyondan bir değer döndürmek ve fonksiyonun çalışmasını sonlandırmak için kullanılır.
def return_sum(num1, num2, num3):
return num1 + num2 + num3
x = return_sum(10,2,8)
x + 1
# return dönen değeri kullanmamızı sağlar.
# çıktı
# 21
*args (arguments): Fonksiyona istediğiniz sayıda pozisyonel (sıralı) argüman göndermenizi sağlar. Bu argümanlar, fonksiyon içinde bir tuple (demet) olarak toplanır.
def args_sum(*args):
print(sum(args))
args_sum(10,30,30,40,50)
#çıktı
#160
**kwargs (keyword arguments): Fonksiyona istediğiniz sayıda anahtar kelime (keyword) argümanı göndermenizi sağlar. Bu argümanlar, fonksiyon içinde bir dictionary (sözlük) olarak toplanır.
def kwargs_example(**kwargs):
print(kwargs)
kwargs_example(apple=50,banana=150,melon=200)
#çıktı
#{'apple': 50, 'banana': 150, 'melon': 200}
#Hazır Fonksiyonlar
map(), bir listedeki her elemana, bir fonksiyondaki işlemi uygulayarak yeni bir liste oluşturan yerleşik bir Python fonksiyonudur.
filter(), bir listedeki elemanları, verilen bir fonksiyonda True (doğru) döndüren koşullara göre filtreleyerek yeni bir liste oluşturan yerleşik bir Python fonksiyonudur.
def controlString(string):
return "Hakan" in string
myStringList = ["Atil", "Hakan Pınarbaşı", "Serdar Ortaç", "Fatih", "Hakan Güneçıkan"]
list(filter(controlString,myStringList))
#çıktı
#['Hakan Pınarbaşı', 'Hakan Güneçıkan']
lambda fonksiyonu, Python'da tek bir ifade ile hızlıca oluşturulan, isimsiz ve küçük bir fonksiyondur.
multipyLambda = lambda num : num * 3
multipyLambda(20)
# çıktı
# 60
result = multipyLambda(10)
print(result)
# çıktı
# 30
# Görüldüğü gibi, 'def' ile bir fonksiyon metodu ve 'return' ifadesi kullanmadan,
# lambda sayesinde doğrudan işlem yapıp sonuca ulaşabiliyoruz.
#Scope (Kapsam) Nedir?
Bir değişkenin kodun neresinde tanındığını ve erişilebilir olduğunu belirten alandır. Python, bir değişkeni ararken LEGB kuralını kullanır.
# B Built-in (Dahili ): Son olarak, orada da yoksa
# Python'un kendi içinde tanımlanmış print, len, range
# gibi dahili fonksiyon veya sabitlerde arar.
my_string = "Atil"
# G Global (En Dış Katman)
def my_func():
my_string = "James"
# E Enclosing (Çevreleyen Kapsam)
def my_func_2():
# L Local (Yerel Kapsam)
my_string = "Lars"
print(my_string)
my_func_2()
Bir fonksiyon içinden, o fonksiyonun dışındaki (global kapsamdaki) bir değişkenin değerini kalıcı olarak değiştirmek istersek global anahtar’ını kullanarak değiştirebiliz.
y = 10
def changeY():
global y # !!!
y = 5
print(y)
changeY()
# Çıktı
# 5
#Class (Sınıf) Nedir?
Python'da class (sınıf), kendi veri ve fonksiyonlarını barındıran özel bir yapıdır. Bir sınıf, nesne oluşturmak için bir şablon (template) gibidir.
Sınıflar, birbiriyle ilişkili verileri ve bu verilerle çalışacak fonksiyonları tek bir çatı altında toplar.
class Person():
name = "Fatih"
age = "23"
fatih.name = "Fatih Pınarbaşı"
Bu şekilde nesnenin içindeki veriyi sonradan da değiştirebiliriz.
__init__() Nedir?
- Nesne oluşurken, nesneye ait başlangıç değerlerini tanımlamamıza yarar.
- Sınıfın kullanılabilmesi için hangi bilgilerin zorunlu olduğunu da tanımlar.
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# Bu sınıftan bir kişi oluşturalım
fatih = Person("Fatih", 23, "Male")
# Artık fatih adında bir nesnemiz var.
# Peki bu nesne neler biliyor?
print(fatih.name) # Fatih
print(fatih.age) # 23
print(fatih.gender) # Male
Sınıfın içinde tanımladığımız self, oluşturduğun nesnenin kendisini temsil eder.
#Sınıfa Özel Fonksiyonlar (Method)
Python’da bir sınıfın içine yazdığımız fonksiyonlara method (yöntem) denir.
Bu method’lar sadece o sınıfa ait nesneler tarafından çağrılabilir. Yani dışarıdan değil, sadece nesne üzerinden erişilebilir.
class Person():
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def test(self):
print("test")
Burada test() adında bir method tanımladık.
fatih = Person("Fatih", 23, "Male")
fatih.test()
# Çıktı: test
Zorunlu olmayan bir parametre eklemek istersek ne yapmalıyız?Zorunlu olmayan parametre eklemek istersek napabiliriz
class Person():
# zorunlu olmayan parametre
job = ""
# initializer method
def __init__(self, name, age, gender, job=""):
self.name = name
self.age = age
self.gender = gender
self.job = job
# method
def printName(self):
print(self.name)
job parametesi zorunlu değil istenirse verilir, istenmezse boş kalır.
#Nesne yönelimli programlama (OOP – Object Oriented Programming) Nedir?
Programları nesneler aracılığıyla modellememizi sağlayan bir programlama yaklaşımıdır.
Inheritance (Kalıtım)
Kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve metotlarını almasıdır. Alt sınıf, üst sınıfın yeteneklerine sahip olur.
class Musician():
def __init__(self, name):
print("Musician class")
self.name = name
def test1(self):
print("test1")
def test2(self):
print("test2")
Musician adında bir sınıf tanımladık. Bu sınıf, müzisyenlerin temel özelliklerini içeriyor.
class MusicianChild(Musician):
def __init__(self, name):
print("MusicianChild")
super().__init__(name)
MusicianChild,Musiciansınıfından türetildi.- Yani
MusicianChild, artık bir müzisyendir. - Bu sınıf hem kendi fonksiyonlarını barındırabilir, hem de
Musiciansınıfından gelenleri kullanabilir.
Polymorphism (Çok Biçimlilik)
Aynı isimdeki bir methodun, farklı sınıflarda farklı şekillerde davranmasıdır.
class Banana():
def __init__(self, name):
self.name = name
def info(self):
return f"100 calories {self.name}"
class Apple():
def __init__(self, name):
self.name = name
def info(self):
return f"150 calories {self.name}"
- İki farklı sınıf tanımladık:
BananaveApple - Her ikisi de:
nameadında bir bilgi alır (örneğin "Muz", "Elma")info()adında bir fonksiyon içerir
- Ama
info()fonksiyonu her sınıfta farklı bir mesaj döner:- Muzlar için “100 kalori”
- Elmalar için “150 kalori”
fruits = [Banana, Apple]
for fruit in fruits:
print(fruit.info())
# çıktı
# 100 calories Muz
# 150 calories Elma
Encapsulation (Kapsülleme) Nedir?
Veriyi dışarıya karşı koruma altına alma işlemidir. Bazı değişkenleri dışarıdan erişilemez hale getiririz. (private)
class Phone():
def __init__(self, name, price):
self.name = name
self.price = price
def info(self):
print(f"{self.name} price is: {self.price}")
namevepriceherkese açık.- Herkes dışarıdan rahatça değerlerini değiştirebilir.
- Bu çok tehlikeli olabilir, çünkü kullanıcı yanlışlıkla ya da bilerek değeri bozabilir.
class Phone():
def __init__(self, name, price):
self.__name = name # özel hale getirdik
self.__price = price # özel hale getirdik
def info(self):
print(f"{self.__name} price is: {self.__price}")
__nameve__pricebaşına çift alt çizgi (__) koyarak bu değişkenleri gizledik.- Artık bu değerlere dışarıdan doğrudan ulaşılamaz.
def changePrice(self, price):
self.__price = price
changePrice() Fonksiyonu Ne Yapar?
__pricedeğişkeni özel (private) olduğu için dışarıdan direktnesne.__price = 100diyemeyiz.- Onun yerine bu fonksiyonu kullanırız.
- Böylece sadece bu fonksiyon üzerinden
__pricegüncellenir aynı bir anahtar gibi.
#Abstraction (Soyutlama) Nedir?
Karmaşık yapıları gizleyerek, sadece önemli bilgileri gösterme tekniğidir. Kullanıcı ne yapıldığını bilir, nasıl yapıldığını bilmek zorunda değildir.
from abc import ABC, abstractmethod
class Car(ABC):
@abstractmethod
def maxSpeed(self):
pass
Car sınıfı soyut bir sınıftır; içindeki maxSpeed() fonksiyonu sadece bir şablondur ve alt sınıflar bu fonksiyonu mutlaka kendileri tanımlamak zorundadır. Bu sınıf doğrudan kullanılamaz, yalnızca kalıtım için vardır.
class Tesla(Car):
def maxSpeed(self):
print("200km")
class Mercedes(Car):
def maxSpeed(self):
print("250km")
tesla = Tesla()
tesla.maxSpeed() # 200km
mercedes = Mercedes()
mercedes.maxSpeed() # 250km
Soyutlama, nasıl yapılacağını değil, ne yapılacağını tanımlar. Her araba maxSpeed'e sahip olmalı ama nasıl çalışacağı alt sınıfa bağlı.
#Python’da Özel Methodlar
Bu methodlar Python'da özel anlamlar taşıyan, genellikle çift alt çizgili (__) olan fonksiyonlardır.
__str__() Methodu
class Fruit():
def __init__(self, name, calories):
self.name = name
self.calories = calories
def __str__(self):
return f"{self.name}: {self.calories} calories"
myFruit = Fruit("banana", 150)
print(myFruit)
# Çıktı: banana: 150 calories
Normalde print(nesne) yazınca ekrana nesnenin adresi basılırdı. Ama __str__() sayesinde, ekranda daha anlamlı bir metin görünür.
Özel Methodlar buraya tıklayarak daha fazla özel method’a bakabilirsiniz.