0Pricing
Python Academy · Ders

@classmethod ve @staticmethod

Uygun dekoratörlerle sınıf düzeyinde ve statik yöntemler tanımlayın.

@classmethod ve @staticmethod, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. 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.

Giriş

@classmethod, ilk bağımsız değişken olarak sınıfı alır. @staticmethod, özel bir bağımsız değişken almaz. Her ikisi de sınıf üzerinde tanımlanır.

Örnek ve Sınıf ve Statik Yöntemler

Normal yöntemler self alır. Sınıf yöntemleri cls alır. Statik yöntemler ikisini de almaz. Seçiminizi ihtiyaç duyduğunuz verilere göre yapın.
class Demo:
    def instance(self): return 'instance'
    @classmethod
    def class_m(cls): return f'class: {cls.__name__}'
    @staticmethod
    def static_m(): return 'static'
d = Demo()
print(d.instance())
print(Demo.class_m())
print(Demo.static_m())

Fabrika Olarak @classmethod

En yaygın kullanım alanı alternatif oluşturuculardır. __init__ içinde ayrıştırma yapmak yerine Date.from_string('2024-01-15') kullanabilirsiniz.
class Date:
    def __init__(self, y,m,d): self.y,self.m,self.d=y,m,d
    @classmethod
    def today(cls):
        from datetime import date
        d = date.today()
        return cls(d.year, d.month, d.day)
    def __repr__(self): return f'{self.y}-{self.m}-{self.d}'
print(Date.today())

Kalıtımla @classmethod

Bir sınıf yöntemindeki cls, temel sınıfı değil gerçek alt sınıfı ifade eder. Bu, fabrika yöntemlerinin alt sınıflarla doğru çalışmasını sağlar.
class Animal:
    @classmethod
    def create(cls, name):
        return cls(name)
    def __init__(self, name): self.name = name
class Dog(Animal): pass
d = Dog.create('Rex')
print(type(d).__name__, d.name)

Araçlar için @staticmethod

Statik yöntemler, mantıksal olarak bir sınıfla gruplandırılmış normal işlevlerdir. Sınıf veya örnek verilerine erişemezler.
class MathHelper:
    @staticmethod
    def clamp(value, lo, hi):
        return max(lo, min(hi, value))
print(MathHelper.clamp(15, 0, 10))
print(MathHelper.clamp(-5, 0, 10))

@staticmethod ve Modül İşlevi Karşılaştırması

Bir işlevin sınıfa ihtiyacı yoksa modül düzeyinde bir işlev olabilir. @staticmethod yalnızca mantıksal olarak sınıfa ait olduğunda kullanılmalıdır.
class Validator:
    @staticmethod
    def is_email(s): return '@' in s and '.' in s
print(Validator.is_email('user@example.com'))
print(Validator.is_email('not-an-email'))

Örnekten Çağırma

Hem @classmethod hem de @staticmethod örnekler üzerinde çağrılabilir; ancak cls ve ilk bağımsız değişkenin olmaması davranışı değişmez.
class C:
    @classmethod
    def who(cls): return cls.__name__
    @staticmethod
    def pi(): return 3.14
c = C()
print(c.who())
print(c.pi())

Tekil Nesneler için Sınıf Yöntemi

classmethod'lar, bir örneğin zaten var olup olmadığını denetleyerek tekil nesne desenlerini zorunlu kılabilir.
class Singleton:
    _instance = None
    @classmethod
    def get(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance
a = Singleton.get()
b = Singleton.get()
print(a is b)

Sınıf Yöntemlerini Geçersiz Kılma

Bir alt sınıf, sınıf yöntemini geçersiz kılabilir. Bu durumda cls alt sınıf olur ve polimorfizm korunur.
class Base:
    @classmethod
    def info(cls): return f'{cls.__name__} info'
class Child(Base): pass
print(Base.info())
print(Child.info())

cls ile Tür Denetimi

Bir sınıf yönteminin içinde cls, gerçek sınıftır. Örnekler oluşturmak için cls() kullanın; sınıf adını sabit olarak yazmayın.
class Shape:
    @classmethod
    def make(cls):
        return cls()  # NOT Shape()
class Square(Shape): pass
print(type(Square.make()).__name__)

@property ile Birleştirme

Sınıf düzeyinde önbelleğe alınan bir değer, sınıf genelinde önbelleğe alma için @classmethod ile sınıf niteliğini birleştirebilir.
class Config:
    _data = None
    @classmethod
    def load(cls):
        if cls._data is None:
            cls._data = {'debug': True}
        return cls._data
print(Config.load())

Hızlı Yoklama

Bir @classmethod içindeki cls nedir?

Özet

@classmethod, cls alır: fabrikalar, alternatif oluşturucular ve tekil nesneler için kullanılır. @staticmethod özel bir şey almaz: araç işlevleri için kullanılır. cls, gerçek (alt) sınıftır.

Devam Edin

Mükemmel ilerliyorsunuz! Bir sonraki kavramda ustalaşmak için devam edin.

Sıkça Sorulan Sorular

“@classmethod ve @staticmethod” dersi ücretsiz mi?

Evet — “@classmethod ve @staticmethod” 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.

“@classmethod ve @staticmethod” dersinde ne öğreneceğim?

Uygun dekoratörlerle sınıf düzeyinde ve statik yöntemler tanımlayın. 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 4. dersidir.

“@classmethod ve @staticmethod” 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. Birinci Sınıf Nesneler Olarak İşlevler
  2. Özel Dekoratörler Yazma
  3. @property Dekoratörü
  4. @classmethod ve @staticmethod
← Python Academy Sayfasına Dön