Arama butonu
Bu konudaki kullanıcılar: 1 misafir
2
Cevap
1495
Tıklama
0
Öne Çıkarma
staticmethod ile classmethod farkı
S
6 yıl
Yüzbaşı
Konu Sahibi

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 >

İ
6 yıl
Yüzbaşı

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ı >

S
6 yıl
Yüzbaşı
Konu Sahibi

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/



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.