Şimdi Ara

staticmethod ile classmethod farkı

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
1.447
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Python'da @classmethod ile @staticmethod farkını açıklayabilecek olan var mı? @classmethod'da class parametre olarak geliyor, tamam, fakat onu sormuyorum. Niye böyle bir şeye ihtiyaç duyulmuş? Ne sağlıyor?

    edit: SO'da cevaplardan tatmin olmadım, zaten kendi aralarında tartışmışlar, "hah, tamam" denecek bir yanıt görmedim.



    < Bu mesaj bu kişi tarafından değiştirildi seyfi84 -- 16 Haziran 2019; 10:59:44 >



  • Selamunaleyküm,
    Öncelikle Python daki staticmethod la diğer dillerdeki static methodlar(mesela C#) arasında mantık olarak bir farklılık yok.
    Ancak classmethod için:
    Bilmiyorum dikkatini çektimi ama Python'da constructors için herhangi bir overload bulunmuyor. Sadece __init__ methodunu tanımlayabilirsin. Bu ise birden fazla constructor'a sahip olamayacağın anlamına geliyor. Bunu aşmak için classmethod adı verilen methodların üretilmesine izin verilmiş. Örnek vermek gerekirse:

    class Silah:
    def __init__(self,name):
    self.Name = name

    @classmethod
    def yeniSilah(cls, name, year):
    silah = cls(name) #Bir önceki init methodu çağırıldı
    silah.Year = year
    return silah #Yeni nesne döndürüldü.

    a = Silah("Desert Eagle")
    b = Silah.yeniSilah("Desert Eagle",1986)

    Görüldüğü üzere classmethod olmasaydı overload etme şansımız yoktu.

    Ben böyle biliyorum, inşaallah yardımcı olmuştur hayırlısıyla.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Sağol fakat tatmin olmadım. Yazdığın şey constructor değil de factory pattern gibi olmuş.
    Ben araştırmaya devam ediyorum, Python Essential Reference (david beazley)da birkaç işe yarar paragraf/örnek buldum. En tipik fark şöyle bir örnek (ilki 4 ikincisi 8 basıyor) https://paste.ubuntu.com/p/NbjW7ZBhTD/
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.