Python Sınıfları Nasıl Oluşturulur
type'ı, varsayılan üst sınıfı ve sınıf oluşturma kancalarını öğrenin.
Python Sınıfları Nasıl Oluşturulur, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
type() Bir Meta Sınıftır
Python'daki her sınıf, type sınıfının bir örneğidir. type kendisi de bir sınıftır; tüm meta sınıfların meta sınıfıdır.
# These are equivalent:
class Dog:
sound = "woof"
Dog2 = type("Dog2", (), {"sound": "woof"})
print(type(Dog)) # <class 'type'>
print(type(Dog2)) # <class 'type'>type() için Üç Bağımsız Değişkenli Biçim
type(name, bases, namespace), dinamik olarak yeni bir sınıf oluşturur. Bu, class bildirimlerinin perde arkasında yaptığı işlemin aynısıdır.
Animal = type("Animal", (), {"speak": lambda self: "..."})
Dog = type("Dog", (Animal,), {"speak": lambda self: "woof"})
d = Dog()
print(d.speak()) # woofSınıf Oluşturma Adımları
Python bir class bildirimi gördüğünde şunları yapar: 1) meta sınıfı çözümler, 2) ad alanını hazırlar, 3) sınıf gövdesini yürütür, 4) metaclass(name, bases, namespace) çağrısını yapar.
# class Foo(Base, metaclass=Meta):
# x = 1
#
# Equivalent to:
# namespace = Meta.__prepare__("Foo", (Base,))
# exec(class_body, namespace)
# Foo = Meta("Foo", (Base,), namespace)__prepare__
__prepare__(name, bases, **kw), meta sınıf üzerinde bulunan ve sınıf gövdesinin yürütülmesi sırasında kullanılacak ad alanı sözlüğünü döndüren bir sınıf yöntemidir. Bir OrderedDict veya özel bir eşleme kullanmak için bu yöntemi geçersiz kılın.
class OrderedMeta(type):
@classmethod
def __prepare__(mcs, name, bases, **kw):
print(f"Preparing namespace for {name}")
return {}
class MyClass(metaclass=OrderedMeta):
x = 1
y = 2type içinde __new__ ve __init__ Karşılaştırması
type.__new__ sınıf nesnesini oluşturur; type.__init__ ise onu başlatır. Meta sınıflar için sınıf oluşturmayı özelleştirmek üzere __new__ yöntemini geçersiz kılın.
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kw):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kw)
return cls._instances[cls]
class DB(metaclass=Singleton):
pass
print(DB() is DB()) # TrueSınıf Dekoratörleri ve Meta Sınıflar
Sınıf dekoratörleri oluşturma sonrasında uygulanır; meta sınıflar oluşturma sürecinin kendisini denetler. Basit eklemeler için dekoratörleri tercih edin. Oluşturma sürecini etkilemeniz gerektiğinde meta sınıfları kullanın.
def add_repr(cls):
cls.__repr__ = lambda self: f"{cls.__name__}()"
return cls
@add_repr
class Widget:
pass
print(Widget()) # Widget()__init_subclass__
Bir alt sınıf tanımlandığında __init_subclass__, temel sınıf üzerinde çağrılır. Bu, alt sınıf davranışını özelleştirmek için meta sınıflara göre daha hafif bir seçenektir.
class Plugin:
_registry = []
def __init_subclass__(cls, **kw):
super().__init_subclass__(**kw)
Plugin._registry.append(cls)
class AudioPlugin(Plugin): pass
class VideoPlugin(Plugin): pass
print(Plugin._registry) # [AudioPlugin, VideoPlugin]ABCMeta
ABCMeta, @abstractmethod aracılığıyla soyut temel sınıfları destekleyen yerleşik bir meta sınıftır.
from abc import ABCMeta, abstractmethod
class Shape(metaclass=ABCMeta):
@abstractmethod
def area(self): ...
class Circle(Shape):
def __init__(self, r): self.r = r
def area(self): return 3.14159 * self.r ** 2
# Shape() # TypeError: Can't instantiate abstract classBir Sınıfın Meta Sınıfını İnceleme
Bir sınıfın meta sınıfını bulmak için type(cls), yöntem çözümleme sırasını görmek için cls.__mro__ kullanın.
class Meta(type): pass
class Foo(metaclass=Meta): pass
print(type(Foo)) # <class '__main__.Meta'>
print(Foo.__mro__) # (Foo, object)Meta Sınıf Kalıtımı
Bir sınıfın meta sınıfı, alt sınıflarına miras kalır. İki temel sınıfın farklı meta sınıfları varsa en türemiş meta sınıf kullanılmalıdır; aksi halde bir çakışma oluşur.
class MyMeta(type): pass
class Base(metaclass=MyMeta): pass
class Child(Base): pass # Child's metaclass is also MyMeta
print(type(Child)) # <class '__main__.MyMeta'>Meta Sınıflar Ne Zaman Kullanılmalı
Meta sınıfları şu amaçlarla kullanın: alt sınıfları otomatik olarak kaydetmek, sınıf değişmezlerini zorunlu kılmak, ORM alanlarını algılamak (Django'nun Model sınıfında olduğu gibi) ve API çatısı yönlendirmesi yapmak. Çoğu durumda bunun yerine __init_subclass__ veya sınıf dekoratörlerini kullanın.
# Real-world: Django ORM uses ModelBase metaclass
# to collect field definitions into _meta
# You rarely need a custom metaclass;
# __init_subclass__ covers most plugin/registration patternsHızlı Kontrol
type("Dog", (Animal,), {"speak": lambda self: "woof"}) ne yapar?
Özet
Her sınıf, type sınıfının bir örneğidir. Sınıf oluşturma süreci şöyledir: meta sınıfı çözümle → ad alanını hazırla → gövdeyi yürüt → meta sınıfı çağır. Basit alt sınıf kancaları için __init_subclass__ yöntemini tercih edin; yalnızca sınıf oluşturmanın kendisini denetlemeniz gerektiğinde tam bir meta sınıf kullanın.
Sıkça Sorulan Sorular
“Python Sınıfları Nasıl Oluşturulur” dersi ücretsiz mi?
Evet — “Python Sınıfları Nasıl Oluşturulur” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“Python Sınıfları Nasıl Oluşturulur” dersinde ne öğreneceğim?
type'ı, varsayılan üst sınıfı ve sınıf oluşturma kancalarını öğrenin. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Python Sınıfları Nasıl Oluşturulur” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Python Sınıfları Nasıl Oluşturulur
- Özel Üst Sınıflar Yazma
- Tanımlayıcılar: __get__, __set__, __delete__
- __slots__ ve Bellek Optimizasyonu