Saat mengintegrasikan aplikasi Django yang belum pernah saya gunakan sebelumnya, saya menemukan dua cara berbeda yang digunakan untuk mendefinisikan fungsi di kelas. Penulis sepertinya menggunakan keduanya dengan sangat sengaja. Yang pertama adalah yang sering saya gunakan:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
Yang lainnya adalah yang tidak saya gunakan, terutama karena saya tidak mengerti kapan harus menggunakannya, dan untuk apa:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
Dalam dokumen Python, classmethod
dekorator dijelaskan dengan kalimat ini:
Metode kelas menerima kelas sebagai argumen pertama implisit, seperti metode instance menerima instance.
Jadi saya kira cls
mengacu pada Dummy
dirinya sendiri (itu class
, bukan contoh). Saya tidak begitu mengerti mengapa ini ada, karena saya selalu bisa melakukan ini:
type(self).do_something_with_the_class
Apakah ini hanya demi kejelasan, atau apakah saya melewatkan bagian terpenting: hal-hal menyeramkan dan menarik yang tidak dapat dilakukan tanpanya?