0Pricing
Python Academy · Ders

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())   # woof

Sı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 = 2

type 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())  # True

Sı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 class

Bir 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 patterns

Hı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

  1. Python Sınıfları Nasıl Oluşturulur
  2. Özel Üst Sınıflar Yazma
  3. Tanımlayıcılar: __get__, __set__, __delete__
  4. __slots__ ve Bellek Optimizasyonu
← Python Academy Sayfasına Dön