ในขณะที่รวมแอพ Django ที่ฉันไม่เคยใช้มาก่อนฉันพบสองวิธีที่แตกต่างกันที่ใช้ในการกำหนดฟังก์ชันในคลาส ผู้เขียนดูเหมือนจะใช้ทั้งสองอย่างตั้งใจมาก คนแรกคือตัวฉันเองใช้บ่อยมาก:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
อีกอันคืออันที่ฉันไม่ได้ใช้ส่วนใหญ่เป็นเพราะฉันไม่เข้าใจว่าจะใช้เมื่อใดและทำเพื่ออะไร:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
ในเอกสาร Python classmethod
มัณฑนากรอธิบายด้วยประโยคนี้:
เมธอดคลาสได้รับคลาสเป็นอาร์กิวเมนต์แรกโดยนัยเช่นเดียวกับที่วิธีอินสแตนซ์ได้รับอินสแตนซ์
ดังนั้นฉันเดาว่าcls
หมายถึงDummy
ตัวมันเอง ( class
ไม่ใช่อินสแตนซ์) ฉันไม่เข้าใจว่าทำไมสิ่งนี้ถึงมีอยู่เพราะฉันสามารถทำได้เสมอ:
type(self).do_something_with_the_class
นี่เป็นเพียงเพื่อความชัดเจนหรือว่าฉันพลาดส่วนที่สำคัญที่สุด: สิ่งที่น่ากลัวและน่าสนใจที่ไม่สามารถทำได้หากไม่มีมัน?