İleri Python: dilin derinlikleri
Tanımlayıcılar, metasınıflar, bağlam yöneticileri ve içe aktarma sistemi gibi ileri özellikleri anlayarak çerçevelerin nasıl çalıştığını görür ve kendi araçlarını yazarsın.
Seviye 401 · 17 ders · 24 pratik lab
Dersler
Nesne modeli
- Her şey nesne: tür, kimlik ve değer
- Öznitelik arama sırası ve __getattr__
- Tanımlayıcılar: property nasıl çalışır
- __slots__ ve bellek
- Çoklu miras ve MRO
- Kısa görev: tanımlayıcıyla doğrulamalı alanlar
Sınıf oluşturma
- Sınıf dekoratörleri
- __init_subclass__ ile otomatik kayıt
- Metasınıflar: ne zaman gerçekten gerekir
- Parametreli dekoratörler ve functools.wraps
- Kısa görev: kendini kaydeden eklenti sınıfları
Kaynaklar ve modüller
- ExitStack ve iç içe kaynaklar
- İçe aktarma sistemi: bulucular ve yükleyiciler
- importlib ile dinamik yükleme ve riskleri
- Yapısal desen eşleme: sınıf ve sözlük desenleri
- Kısa görev: bağlam yöneticisiyle küçük yapılandırma dili
Bitirme
- Bitirme görevi: tanımlayıcı ve metasınıfla küçük bir ORM
Pratik lablar
- Eksik ayarı __getattr__ ile karşılamak: Ayar nesnesinde tanımlı olmayan niteliklerde varsayılan sözlüğe bakan, orada da yoksa anlaşılır AttributeError veren __getattr__ yaz.
- Örnek niteliğinin gölgelediği metodu bulmak: Bir örnek niteliği aynı adlı metodu gölgelediği için bozulan sipariş sınıfında arama sırasını izleyerek hatayı bul ve testleri geçir.
- Nitelik erişimini kaydeden vekil nesne: Sarmaladığı nesneye yapılan her okuma ve yazmayı kaydeden, özel metotları da doğru ileten ve sonsuz özyinelemeye düşmeyen vekil sınıfı yaz.
- Pozitif sayı tanımlayıcısı yazmak: Atanan değerin pozitif sayı olduğunu denetleyen ve değeri örnek başına saklayan bir tanımlayıcı yaz, iki ayrı alanda kullan.
- __slots__ ile bellek kazancını ölçmek: Yüz binlerce sensör okuması tutan sınıfa __slots__ ekle, tracemalloc ile önceki ve sonraki belleği ölç ve kırılan zayıf başvuruyu onar.
- Örnekler arası sızan tanımlayıcıyı onarmak: Değeri kendi üstünde sakladığı için tüm örneklerde aynı fiyatı gösteren tanımlayıcıyı __set_name__ kullanarak örnek başına saklayacak şekilde düzelt.
- Sınıf süsleyicisiyle __repr__ eklemek: Uygulandığı sınıfa alan adlarından otomatik bir __repr__ ekleyen sınıf süsleyicisini yaz ve üç farklı sınıfta dene.
- Dışa aktarıcıları kendiliğinden kaydetmek: __init_subclass__ ile her alt sınıfı biçim adına göre kayda geçir, aynı adın iki kez kaydını reddet ve ada göre doğru sınıfı döndür.
- Gereksiz metasınıfı sadeleştirmek: Yalnızca alan denetimi için yazılmış metasınıfı __init_subclass__ ve __set_name__ ile değiştir; mevcut testler aynen geçmeli, çoklu kalıtım çakışması kalkmalı.
- Süsleyicide kaybolan adı geri getirmek: Süslenen fonksiyonların adını ve belge dizgisini yutan zamanlama süsleyicisine functools.wraps ekle ve yardım çıktısının düzeldiğini göster.
- Parametreli yeniden deneme süsleyicisi: Deneme sayısını ve yakalanacak istisna türlerini parametre alan, son hatayı zincirleyerek yükselten bir süsleyici yaz.
- Karışım sınıflarının sırasını düzeltmek: super() zincirini kıran karışım sınıflarında MRO'yu incele, eksik super çağrılarını tamamla ve her adımın tam bir kez çalıştığını testle kanıtla.
- Birçok dosyayı ExitStack ile yönetmek: Sayısı çalışma anında belli olan dosyaları ExitStack ile aç; biri açılamazsa öncekilerin kapandığını testle göster.
- Olay sözlüklerini match ile ayrıştırmak: Farklı biçimlerde gelen olay sözlüklerini eşleme ve sınıf kalıplarıyla ayrıştır; tanınmayan biçimi ayrı bir listeye koy.
- Dinamik eklenti yüklemeyi sınırlamak: Kullanıcının verdiği her modül adını yükleyen eklenti yükleyicisini izinli paket önekine ve beklenen arayüze göre denetleyecek şekilde sertleştir.
- Parantezli ve parantezsiz çalışan dekoratör: Süre ölçen dekoratörü hem @timed hem @timed(threshold=...) biçiminde, fonksiyonlarda ve metotlarda çalışacak şekilde yaz; sarmalanan fonksiyonun imzası ve belge metni korunsun.
- Metot çözümleme sırasını okumak: Elmas biçimli küçük bir sınıf ağacında hangi metodun çağrılacağını __mro__ ile incele ve testin beklediği sırayı verecek şekilde taban sınıfların yerini düzelt.
- super() ile iş birliği yapan kurucular: Çoklu kalıtımda bir taban sınıfın kurucusunu atlayan sınıfları, anahtar sözcüklü argümanları zincir boyunca ileten iş birlikçi super() çağrılarıyla düzelt.
- Çalışma dizinini geri yükleyen bağlam yöneticisi: contextlib.contextmanager ile çalışma dizinini geçici olarak değiştiren bir bağlam yöneticisi yaz; blok hata verse bile eski dizine dönülsün.
- Hatada geri alan bağlam yöneticisi sınıfı: Bir ayar güncelleme sınıfına __enter__ ve __exit__ ekle; blok hata verirse değişiklikler geri alınsın, yalnızca belirlenen istisna türü bastırılsın ve diğerleri yukarı iletilsin.
- Komut sözcüklerini match ile ayırmak: Boşlukla ayrılmış komut satırını match ve dizi desenleriyle ekle, sil ve listele işlemlerine yönlendir; tanınmayan komut için anlaşılır bir ileti döndür.
- Sınıf desenleri ve koşullarla ifade ağacı yürütmek: Veri sınıflarından oluşan bir ifade ağacını sınıf desenleri, iç içe desenler ve koşullu dallarla değerlendir; sıfıra bölme ve bilinmeyen düğüm ayrı hatalar versin.
- Modülü adıyla yüklemek: Ayar dosyasında adı yazan biçimlendirici modülünü importlib.import_module ile yükle ve içindeki fonksiyonu çağır; modül yoksa anlaşılır bir hata ver.
- Seçmeli bağımlılığı gerektiğinde yüklemek: Yalnızca bir alt komutun kullandığı ağır kütüphaneyi ilk kullanımda yükle; kütüphane kurulu değilse diğer komutlar çalışmaya devam etsin ve kurulum önerisi gösterilsin.
Kurs hakkında
Tanımlayıcılar, metasınıflar, bağlam yöneticileri ve içe aktarma sistemi gibi ileri özellikleri anlayarak çerçevelerin nasıl çalıştığını görür ve kendi araçlarını yazarsın.
Ne öğreneceksin
- Nesne modeli
- Sınıf oluşturma
- Kaynaklar ve modüller
- Bitirme
Ön koşullar
Aynı yolun 301 düzeyine kadar olan konularını uygulamış olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 401 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.