Memahami Perbezaan antara @staticmethod dan @classmethod Decorators dalam Python
Penghias @staticmethod dan @classmethod dalam Python membolehkan anda membuat kelas -kaedah peringkat dengan tingkah laku yang berbeza. Berikut ialah penjelasan terperinci tentang perbezaan utama mereka:
Konvensyen Panggilan:
Tandatangan Kaedah:
Instansiasi:
Contoh Praktikal:
Pertimbangkan coretan kod berikut:
class A(object): def foo(self, x): print("executing foo({self}, {x})") @classmethod def class_foo(cls, x): print("executing class_foo({cls}, {x})") @staticmethod def static_foo(x): print("executing static_foo({x})") a = A()
Apabila memanggil foo, contoh a ialah secara tersirat diluluskan sebagai hujah pertama:
a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>, 1)
Dengan kaedah kelas, kelas contoh itu secara tersirat diluluskan dan bukannya diri sendiri:
a.class_foo(1) # executing class_foo(<class '__main__.A'>, 1)
Kaedah statik tidak menerima sebarang tersirat hujah:
a.static_foo(1) # executing static_foo(1)
Ringkasan:
Atas ialah kandungan terperinci Apakah Perbezaan Antara `@staticmethod` dan `@classmethod` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!