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