ProgramlamaPython geliştirici

Python'da sınıf yöntemi (@classmethod), statik yöntem (@staticmethod) ve örnek yöntemi arasındaki farkı açıklayın. Hangi durumlarda neyi seçmeliyiz?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

  • Örnek yöntemi — ilk argüman olarak self alır, yani belirli bir nesneye referanstır. Nesnenin durumuna erişmek/değiştirmek için kullanılır.
  • @classmethod ilk argüman olarak cls alır — kendisine ait sınıfa referans, nesneye değil. Fabrika yöntemleri veya genel sınıfla çalışan yöntemler için uygulanır.
  • @staticmethod hiçbir açık argüman almaz. Sınıf içinde yer alan, mantıksal gruplama amacıyla kullanılan normal bir işlevdir.

Örnek:

class MyClass: def instance_method(self): print(f"Örnek: {self}") @classmethod def class_method(cls): print(f"Sınıf: {cls.__name__}") @staticmethod def static_method(): print("Sıradan fonksiyon") obj = MyClass() obj.instance_method() # self — bu obj MyClass.class_method() # cls — bu MyClass MyClass.static_method() # self/cls yok

Kandırmaca soru.

Sık sorulan soru:

Bir sınıf yöntemini örnek üzerinden çağırmak mümkün mü? Bu, sınıf üzerinden çağırmaktan neyi farklı kılar?

Cevap: Evet, sınıf yöntemi hem örnek üzerinden hem de sınıf üzerinden çağrılabilir. Çağrının nereden geldiği önemli değil — ilk argüman her zaman sınıf olacaktır, nesne değil. Örnek üzerinden çağrıldığında, bu sınıf cls olarak geçecektir.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri.


Hikaye

Projede tüm fabrika yöntemleri statik (@staticmethod) yapılmıştı, ancak içinde alt sınıfın ismini öğrenmek gerekiyordu — bu imkansız oldu. cls referansını alabilmek için @classmethod ile düzeltildi.


Hikaye

Örneklerin benzersiz kimliklerini oluşturmak için normal bir yöntem (self) kullanıldı, oysa sınıf yöntemi kullanmalardı çünkü sayacın tüm sınıf için ortak olması gerekir, her nesne için değil.


Hikaye

Geliştirici, sınıfla alakalı olmayan iş mantığını, sınıfın içinde bir statik yönteme koydu. Diğerleri bu fonksiyonu bulamadı çünkü başka bir sınıfın alanında beklemiyorlardı, bu da bakımını zorlaştırdı.