Kendi Yorumlayıcısının yardımıyla Python'da tip denetimi yapılır. Python dinamik bir dil olduğundan, nesnelerin türünü zorunlu kılmaz; bu da hatalara yol açabilir ve hataları bulmayı zorlaştırır. Bunu aşmak için Python, çeşitli diğer araçlarla birlikte kullanılabilir ve kendi Duck Typing yaklaşımının yanı sıra statik tip denetimi özellikleri uygulanabilir.
Farklı programlama dillerinin benimsediği iki farklı tip sistemi vardır; aşağıda gösterilmiştir.
Statik Tipli Dil
Dinamik Tipli Dil
Statik Tipli Dil
Değişken türünün tip denetimi derleme zamanında yapılır. Ayrıca dilin tip sistemi, değişkenin kullanılmadan önce açıkça 'veri türü'nün belirtilmesini zorunlu kılar. Statik tipli programlama dilleri: Scala, Java, C++ vb. Örneğin, Scala'da String bildirimi aşağıda tanımlanmıştır: var myCar:String = "Mercedes"; Yukarıdaki kod, 'myCar' değişken adının 'Mercedes' değeriyle birlikte açıkça 'String' veri türü olarak bildirildiğini gösterir.
Dinamik Tipli Dil
Değişken türünün tip denetimi çalışma zamanında yapılır. Ayrıca dilin tip sistemi, değişkenin kullanılmadan önce açıkça 'veri türü'nün belirtilmesini zorunlu kılmaz. Dinamik tipli programlama dilleri: Python, Javascript, Ruby vb. Örneğin, Python'da String aşağıda tanımlanmıştır: myCar = "Mercedes" Yukarıdaki kod, 'myCar' değişken adının açıkça bildirilmesine gerek olmadığını gösterir.
Python'da 'type()' ve 'isinstance()'
Değişken türleri, Python'un kendi 'type()' fonksiyonu kullanılarak öğrenilebilir. 'type()' çalışma zamanında, programdaki tam değişken türlerini belirlemek için hata ayıklama amacıyla kullanılabilir. Aşağıdaki örnekte bazı değişkenlerin türlerine bakalım.
Yukarıdaki kod 'int' şeklinde çıktı verir. Çünkü değişkenin veri türü tamsayıdır ve bunu belirlemede 'type()' rol oynar.
Python'un 'insinstance('obj','class')' fonksiyonu, 'obj' nesnesinin belirtilen sınıfın bir örneği olup olmadığını bilmek için kullanılabilir. Döndürülen çıktı değeri boolean olup True veya False olabilir.
Yukarıdaki kod True çıktısı verir. Çünkü değişkenin veri türü stringdir ve 'isinstance()' bunu belirlemede rol oynar.
Python'da Duck Typing
Python'da popüler bir ilke vardır: "Eğer bir ördek gibi görünüyorsa, bir ördek gibi yüzüyorsa ve bir ördek gibi vaklıyorsa, muhtemelen bir ördektir." Bu ilke basitçe şunu söyler: Nesnenin veya sınıfın türü önemli değildir; nesne benzer metot ve özelliklere sahipse belirli bir amaç için kullanılabilir. Yukarıdaki ifadeyi daha ayrıntılı açıklığa kavuşturmak için bir örneğe bakalım.
Aşağıdaki örnekte 'Duck' ve 'Human' adlı iki sınıf vardır. Duck sınıfı 'quack' ve 'fly' metotlarını içerir. Benzer şekilde, Human sınıfının da kendi 'quack' ve 'fly' metotları vardır. Duck ve Human farklı sınıflardır ve dolayısıyla farklı nesne veya türlerdir. Ancak Human, Duck içindeki 'fly' ve 'quack' ile benzer metotlar içerir. Ayrıca 'fly_quack' adlı bir metot vardır; bu metot hem uçabildiği hem de vaklayabildiği için çoğunlukla 'Human'dan çok 'Duck' ile benzeşir.
classDuck:defquack(self):print('Quack')deffly(self):print('Flap')classHuman:defquack(self):print('Trying to Quack like a duck')deffly(self):print('Spreading my arm to flap like a duck')deffly_quack(thing):
thing.quack()
thing.fly()Altyapı:
'Duck' sınıfından 'du' adlı bir örnek oluşturalım ve 'fly_quack(du)' fonksiyonuna gönderelim. Benzer şekilde, Human örneği için 'h' oluşturulur ve 'fly_quack(h)' fonksiyonuna gönderilir.
du = Duck()
fly_quack(du)
h = Human()
fly_quack(h)Altyapı:
Yukarıdaki kodun çıktısı aşağıdadır:
Trying to Quack like a duck
Spreading my arm to flap like a duck
Quack
Flap
Altyapı:
'Human' sınıfı 'Duck'tan farklı bir sınıf olmasına rağmen, Python insan için de 'fly_quack' fonksiyonunu çağırır. Nesne türleri farklı olsa da 'Human', Duck'takiyle benzer quack ve fly metotlarına sahip olduğundan, gereken metotları sağlar ve buna göre davranır.
Type Hint ve mypy
Python gibi Dinamik tipli bir dilin, kodu erişilebilir ve okunabilir kılan güçlü bir yönü vardır; ancak bazı dezavantajları da mevcuttur. Dezavantajlardan biri, çalışma zamanı hatalarını bulmaktır; çünkü Python değişkenin türünü zorunlu kılmaz, yani Dinamik tipli bir dildir. Bunun sonucunda, özellikle kodun uzunluğu arttıkça bulunması zor hatalar ve bug'lar ortaya çıkabilir.
Python, 3.5 sürümünden itibaren Type Hint'leri uygulamıştır. Daha eski sürümler TypeHints işlevselliğini desteklemeyebilir.
Type hinting ve mypy olmadan basit bir örnek göreceksiniz.
Aşağıdaki fonksiyon, iki tamsayıyı çıkarıp değeri döndürmesi gereken bir tamsayı çıkarma fonksiyonudur.
Burada yukarıdaki fonksiyonun iki tamsayı 'x' ve 'y' kabul etmesi gerekir; ancak kurallar dayatılmadığı için herhangi bir veri türünü alabilir. Ayrıca, dönen değer herhangi bir şey olabilir; beklenen 'int' iken 'str' değeri ('Subtraction') döndürülmüştür.
Yukarıdaki programın benzer bir uygulamasını, ancak type hint'ler ve 'mypy' kullanarak görelim; bu sayede statik tip denetimini uygulamaya yardımcı olarak programdaki hata ve bug'ları oldukça kolay bir şekilde azaltabiliriz.
'mypy', Python'un kendi dinamik denetimi veya duck typing yaklaşımını type-hinting ile birlikte kullanan, statik tip denetimine yardımcı olan bir Python modülüdür.
Yerel makinenizde 'mypy_example.py' adlı bir dosya oluşturup aşağıdaki kodu yazabilirsiniz. Aşağıdaki kod, parametre olarak iki tamsayıyı girdi olarak kabul eden basit bir programdır ve '->' sonrasında döndürülen veri türünü gösterir; bu da bir 'int'tir. Ancak fonksiyonun int döndürmesi gerekirken string 'Subtracted two integers' döndürülmüştür.
defsub_this(x:int,y:int)->int:return'Subtracted two integers'print(sub_this(8,4))Altyapı:
Yukarıdaki kodu terminalde aşağıdaki komutla çalıştırın.
Ardından, beklenmeyen "str" dönüş değerinin bulunduğunu ve "int" ile düzeltilmesi gerektiğini belirten bir hata gösterilecektir.
Tamsayı değeri döndürülmesi için döndürülen türü iki tamsayının çıkarımı olacak şekilde değiştirelim.
defsub_this(x:int,y:int)->int:return x - y
print(sub_this(8,4))Altyapı:
Yukarıdaki sonuçlar, başarı mesajının yazdırıldığını ve herhangi bir sorun bulunmadığını gösterir.
Tebrikler
Tebrikler, bu eğitimin sonuna geldiniz!
Bu eğitimde, tip denetimini; çeşitli dillerdeki tip sistemi türlerini; Python yöntemleri ('type()' ve 'isinstance()'); ayrıca Python ile duck typing ve 'mypy' ile birleştirilen type hinting'i öğrendiniz.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kendi Yorumlayıcısının yardımıyla Python'da tip denetimi yapılır. Python dinamik bir dil olduğundan, nesnelerin türünü zorunlu kılmaz; bu da hatalara yol açabilir ve hataları bulmayı zorlaştırır. Bunu aşmak için Python, çeşitli diğer araçlarla birlikte kullanılabilir ve kendi Duck Typing yaklaşımının yanı sıra statik tip denetimi özellikleri uygulanabilir.
Farklı programlama dillerinin benimsediği iki farklı tip sistemi vardır; aşağıda gösterilmiştir.
Statik Tipli Dil
Değişken türünün tip denetimi derleme zamanında yapılır. Ayrıca dilin tip sistemi, değişkenin kullanılmadan önce açıkça 'veri türü'nün belirtilmesini zorunlu kılar. Statik tipli programlama dilleri: Scala, Java, C++ vb.
Örneğin, Scala'da String bildirimi aşağıda tanımlanmıştır:
var myCar:String = "Mercedes";Yukarıdaki kod, 'myCar' değişken adının 'Mercedes' değeriyle birlikte açıkça 'String' veri türü olarak bildirildiğini gösterir.
Dinamik Tipli Dil
Değişken türünün tip denetimi çalışma zamanında yapılır. Ayrıca dilin tip sistemi, değişkenin kullanılmadan önce açıkça 'veri türü'nün belirtilmesini zorunlu kılmaz. Dinamik tipli programlama dilleri: Python, Javascript, Ruby vb.
Örneğin, Python'da String aşağıda tanımlanmıştır:
myCar = "Mercedes"Yukarıdaki kod, 'myCar' değişken adının açıkça bildirilmesine gerek olmadığını gösterir.
Python'da 'type()' ve 'isinstance()'
Değişken türleri, Python'un kendi 'type()' fonksiyonu kullanılarak öğrenilebilir. 'type()' çalışma zamanında, programdaki tam değişken türlerini belirlemek için hata ayıklama amacıyla kullanılabilir. Aşağıdaki örnekte bazı değişkenlerin türlerine bakalım.
Yukarıdaki kod 'int' şeklinde çıktı verir. Çünkü değişkenin veri türü tamsayıdır ve bunu belirlemede 'type()' rol oynar.
Python'un 'insinstance('obj','class')' fonksiyonu, 'obj' nesnesinin belirtilen sınıfın bir örneği olup olmadığını bilmek için kullanılabilir. Döndürülen çıktı değeri boolean olup True veya False olabilir.
Yukarıdaki kod True çıktısı verir. Çünkü değişkenin veri türü stringdir ve 'isinstance()' bunu belirlemede rol oynar.
Python'da Duck Typing
Python'da popüler bir ilke vardır: "Eğer bir ördek gibi görünüyorsa, bir ördek gibi yüzüyorsa ve bir ördek gibi vaklıyorsa, muhtemelen bir ördektir." Bu ilke basitçe şunu söyler: Nesnenin veya sınıfın türü önemli değildir; nesne benzer metot ve özelliklere sahipse belirli bir amaç için kullanılabilir.
Yukarıdaki ifadeyi daha ayrıntılı açıklığa kavuşturmak için bir örneğe bakalım.
Aşağıdaki örnekte 'Duck' ve 'Human' adlı iki sınıf vardır. Duck sınıfı 'quack' ve 'fly' metotlarını içerir. Benzer şekilde, Human sınıfının da kendi 'quack' ve 'fly' metotları vardır. Duck ve Human farklı sınıflardır ve dolayısıyla farklı nesne veya türlerdir. Ancak Human, Duck içindeki 'fly' ve 'quack' ile benzer metotlar içerir. Ayrıca 'fly_quack' adlı bir metot vardır; bu metot hem uçabildiği hem de vaklayabildiği için çoğunlukla 'Human'dan çok 'Duck' ile benzeşir.
'Duck' sınıfından 'du' adlı bir örnek oluşturalım ve 'fly_quack(du)' fonksiyonuna gönderelim. Benzer şekilde, Human örneği için 'h' oluşturulur ve 'fly_quack(h)' fonksiyonuna gönderilir.
Yukarıdaki kodun çıktısı aşağıdadır:
'Human' sınıfı 'Duck'tan farklı bir sınıf olmasına rağmen, Python insan için de 'fly_quack' fonksiyonunu çağırır. Nesne türleri farklı olsa da 'Human', Duck'takiyle benzer quack ve fly metotlarına sahip olduğundan, gereken metotları sağlar ve buna göre davranır.
Type Hint ve mypy
Python gibi Dinamik tipli bir dilin, kodu erişilebilir ve okunabilir kılan güçlü bir yönü vardır; ancak bazı dezavantajları da mevcuttur. Dezavantajlardan biri, çalışma zamanı hatalarını bulmaktır; çünkü Python değişkenin türünü zorunlu kılmaz, yani Dinamik tipli bir dildir. Bunun sonucunda, özellikle kodun uzunluğu arttıkça bulunması zor hatalar ve bug'lar ortaya çıkabilir.
Python, 3.5 sürümünden itibaren Type Hint'leri uygulamıştır. Daha eski sürümler TypeHints işlevselliğini desteklemeyebilir.
Type hinting ve mypy olmadan basit bir örnek göreceksiniz.
Aşağıdaki fonksiyon, iki tamsayıyı çıkarıp değeri döndürmesi gereken bir tamsayı çıkarma fonksiyonudur.
Burada yukarıdaki fonksiyonun iki tamsayı 'x' ve 'y' kabul etmesi gerekir; ancak kurallar dayatılmadığı için herhangi bir veri türünü alabilir. Ayrıca, dönen değer herhangi bir şey olabilir; beklenen 'int' iken 'str' değeri ('Subtraction') döndürülmüştür.
Yukarıdaki programın benzer bir uygulamasını, ancak type hint'ler ve 'mypy' kullanarak görelim; bu sayede statik tip denetimini uygulamaya yardımcı olarak programdaki hata ve bug'ları oldukça kolay bir şekilde azaltabiliriz.
'mypy', Python'un kendi dinamik denetimi veya duck typing yaklaşımını type-hinting ile birlikte kullanan, statik tip denetimine yardımcı olan bir Python modülüdür.
'mypy' paketlerini yüklemeniz gerekir
pip install mypyYerel makinenizde 'mypy_example.py' adlı bir dosya oluşturup aşağıdaki kodu yazabilirsiniz.
Aşağıdaki kod, parametre olarak iki tamsayıyı girdi olarak kabul eden basit bir programdır ve '->' sonrasında döndürülen veri türünü gösterir; bu da bir 'int'tir. Ancak fonksiyonun int döndürmesi gerekirken string 'Subtracted two integers' döndürülmüştür.
Yukarıdaki kodu terminalde aşağıdaki komutla çalıştırın.
Ardından, beklenmeyen "str" dönüş değerinin bulunduğunu ve "int" ile düzeltilmesi gerektiğini belirten bir hata gösterilecektir.
Tamsayı değeri döndürülmesi için döndürülen türü iki tamsayının çıkarımı olacak şekilde değiştirelim.
Yukarıdaki sonuçlar, başarı mesajının yazdırıldığını ve herhangi bir sorun bulunmadığını gösterir.
Tebrikler
Tebrikler, bu eğitimin sonuna geldiniz!
Bu eğitimde, tip denetimini; çeşitli dillerdeki tip sistemi türlerini; Python yöntemleri ('type()' ve 'isinstance()'); ayrıca Python ile duck typing ve 'mypy' ile birleştirilen type hinting'i öğrendiniz.
Python hakkında daha fazla bilgi edinmek isterseniz, DataCamp'in Python ile Veri Bilimcileri için Yazılım Mühendisliği kursunu alın.
Kaynakça: