
Understanding Python Classes
Python'da her şey nesnedir ve her nesnenin bir tipi vardır — primitifler, fonksiyonlar ve sınıfların kendisi de dahil. type() ve __class__ bu ilişkiyi ortaya çıkarır.
Kategori
27 yazı

Python'da her şey nesnedir ve her nesnenin bir tipi vardır — primitifler, fonksiyonlar ve sınıfların kendisi de dahil. type() ve __class__ bu ilişkiyi ortaya çıkarır.

Python metaclass'larında hangi metot ne zaman çalışır? Sınıf tanımı ve örnek oluşturma sırasındaki __prepare__, __new__, __init__, __call__ çalışma sırası.

Metaclass metodlarının tam argüman listesiyle birlikte çalışma sırası. Her metoda hangi değerlerin geldiğini adım adım takip edin.

type'tan türetmeyen daha eksiksiz bir metaclass implementasyonu: __call__ ile iki aşamalı yaşam döngüsü, __str__ ve attribute erişiminin namespace'e delegasyonu.
![namespace['attr'] = 1](/images/posts/understanding-python-classes.png)
Python'ın class ifadesini gerçekten nasıl işlediğini görmek için: type.__prepare__ ile namespace al, exec ile gövdeyi çalıştır, type() ile sınıfı oluştur.

Metaclass, örnekleri sınıf olan bir sınıftır. type nasıl int veya str gibi sınıflar üretiyorsa, özel bir metaclass da kendi sınıflarını aynı şekilde üretir.

type'tan türetmeden bir metaclass yazmak mümkün mü? Evet — ama sonuçta elde ettiğiniz nesne gerçek bir Python sınıfı değil, Meta'nın bir örneğidir.

Python'da her sınıfın bir metaclass'ı vardır. Açıkça belirtmezseniz type varsayılan olarak devreye girer — görünmez ama her zaman oradadır.

Python'da Singleton desenini metaclass ile uygulamanın iki yolu — ve aralarındaki kritik fark: birinde alt sınıflar ayrı nesne, diğerinde aynı nesne olur.