Python’da Sınıf Metotları

Python 3 üzerinde oluşturduğumuz sınıflar içinde yazdığımız metotlar dekoratörler yardımı ile birkaç farklı şekilde tanımlanabilir.

Örnek(instance) Metodu: dekoratörü yoktur, sınıf kullanılarak oluşturulmuş bir örneğin(instance) kendisini self parametresi olarak erişebilir.

Sınıf(class) Metodu: dekoratör olarak @classmethod kullanmanız gereklidir. Sınıfı tanımlayan bir cls parametresi alarak sınıf bilgilerine ulaşabilir.

Statik Metot: dekoratörü @staticmethod‘dur. Varsayılan bir parametresi yoktur. Sınıfın ya da sınıftan oluşmuş bir örneğin bilgilerine erişimi yoktur.

Örnek ile daha açıklamayı daha anlamlı hale getirelim.

Bir oyun yaptığınızı ve Dusman adında bir sınıf ile sürekli ana karaktere yeni düşmanlar oluşturduğunuzu düşünelim.
Zayıf ve güçlü adında 2 tür düşman karakteri olduğunu varsayalım.

class Dusman:
    def __init__(self, enerji, vurus):
        self.enerji = enerji
        self.vurus = vurus
        
    @classmethod
    def guclu(cls):
        return cls(50, 5)
        
    @staticmethod
    def zararliMi():
        return True
    
    def hasarAl(self, hasar):
        self.enerji = self.enerji - hasar
    
# Standart bir sınıf örneği oluşturma
zayif = Dusman(15, 2)
zayif.hasarAl(5)
print(zayif.enerji)

# Classmethod ile daha verimli bir sınıf örneği oluşturma yolu
# Burada sürekli güçlü düşman için aynı parametreleri girmek yerine
# Tanımlı Classmethod'u kullanarak tekrarlı kod yazımından kaçınıyoruz
guclu = Dusman.guclu()
guclu.hasarAl(10)
print(guclu.enerji)

# Statik metot için bu örnek pek anlamlı durmasa da
# Sınıfı anlamak/ayırmak vb. durumlar için kullanılabilir.
if Dusman.zararliMi():
    print("Düşman sınıfı zararlı.")

# statik olmasına rağmen metotları örnek üzerinden de kullanabiliriz.
# Örneğin hiçbir verisine erişemeyeceğini unutmamak gerek
if Dusman.zararliMi():
    print("Düşman sınıfı zararlı.")

Bir Cevap Yazın