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.
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/
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 >