Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Perbezaan Antara `@classmethod` dan `@staticmethod` dalam Python?

Apakah Perbezaan Antara `@classmethod` dan `@staticmethod` dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-12-22 10:16:46229semak imbas

What's the Difference Between `@classmethod` and `@staticmethod` in Python?

Maksud dan Penggunaan @classmethod dan @staticmethod untuk Pemula

Dalam Python, @classmethod dan @staticmethod ialah penghias yang digunakan untuk menentukan kaedah dengan khusus ciri-ciri.

@classmethod

Kaedah kelas ialah kaedah yang terikat kepada kelas, bukan kepada tika individu kelas. Ia mesti mempunyai kelas sebagai hujah pertamanya, yang biasanya dinamakan cls. Mengikut konvensyen, kaedah kelas dinamakan dengan awalan from_ atau create_.

Bila menggunakan @classmethod:

  • Apabila anda ingin mencipta kaedah kilang yang mengembalikan a tika baharu kelas.
  • Apabila anda ingin menentukan kaedah yang beroperasi pada kelas itu sendiri, bukannya pada satu contoh.

Contoh:

class Date:
    def __init__(self, day, month, year):
        self.day = day
        self.month = month
        self.year = year

    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return cls(day, month, year)

@staticmethod

Kaedah statik ialah kaedah yang tidak terikat kepada sama ada kelas atau contoh. Ia tidak mempunyai akses kepada sebarang contoh atau pembolehubah kelas. Kaedah statik biasanya digunakan untuk fungsi utiliti yang boleh digunakan semula tanpa pengubahsuaian.

Bila menggunakan @staticmethod:

  • Apabila anda ingin menentukan fungsi yang berfungsi beberapa operasi tetapi tidak bergantung pada kelas atau keadaan contoh.
  • Apabila anda ingin mencipta fungsi yang boleh dipanggil dari mana-mana konteks.

Contoh:

class Date:
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999

Perbezaan antara @classmethod dan @staticmethod

Feature @classmethod @staticmethod
Access to class Has access to the class No access to the class
Access to instance No access to instances No access to instances
Usage Factory methods, operations on the class Utility functions, independent of class or instances

Atas ialah kandungan terperinci Apakah Perbezaan Antara `@classmethod` dan `@staticmethod` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn