Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
2
Cevap
1497
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.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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