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

Apakah Perbezaan Antara `@classmethod` dan `@staticmethod` dalam Reka Bentuk Kelas Python?

Barbara Streisand
Lepaskan: 2024-12-22 12:40:41
asal
493 orang telah melayarinya

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

Memahami Kepentingan @classmethod dan @staticmethod untuk Reka Bentuk Kelas

Dalam Python, @classmethod dan @staticmethod ialah penghias yang menyediakan fungsi tambahan kepada kaedah dan fungsi kelas. Penghias ini meningkatkan kebolehgunaan semula dan penyusunan kod dengan membenarkan kaedah dikaitkan dengan kelas dan bukannya contoh tertentu.

@classmethod

Penghias @classmethod menunjukkan kaedah kelas, yang memerlukan rujukan kelas sebagai parameter pertama. Kaedah kelas ditakrifkan dalam kelas, tetapi tujuan penggunaannya adalah terutamanya untuk beroperasi pada kelas itu sendiri, bukannya contoh kelas. Mereka menawarkan beberapa kelebihan:

  • Warisan Kelas: Kaedah kelas diwarisi oleh subkelas, menyediakan cara yang mudah untuk menambah fungsi biasa kepada berbilang kelas tanpa perlu mentakrifkan semula kaedah yang sama dalam setiap kelas terbitan.
  • Fungsi Seperti Kilang: Kaedah kelas boleh bertindak sebagai kaedah kilang, membolehkan objek dicipta atau dimulakan menggunakan pendekatan bukan contoh khusus.
  • Suntikan Kebergantungan: Kaedah kelas boleh digunakan sebagai cara suntikan kebergantungan , memudahkan ujian dan fleksibiliti yang lebih mudah dalam mengubah kelas dependencies.

@staticmethod

Penghias @staticmethod menandakan kaedah statik, yang pada asasnya ialah fungsi biasa yang tidak mempunyai sambungan ke kelas atau kejadiannya . Ia tidak memerlukan sebarang parameter dan tidak terlibat dalam operasi khusus kelas.

Bila dan Cara Menggunakan @classmethod dan @staticmethod

Menentukan masa dan cara untuk menggunakan @classmethod dan @staticmethod bergantung pada fungsi tertentu dilaksanakan:

  • Gunakan @classmethod apabila:

    • Sesuatu kaedah perlu beroperasi pada kelas itu sendiri, bukannya contoh.
    • Anda ingin menentukan kaedah kilang yang mencipta objek kelas.
    • Kelas pewarisan adalah perlu untuk menyediakan kefungsian biasa.
  • Gunakan @staticmethod apabila:

    • Sesuatu kaedah berfungsi semata-mata dan berfungsi tidak beroperasi pada kelas atau kejadian.
    • Anda perlu mencipta fungsi pembantu atau utiliti yang dikaitkan secara logik dengan kelas, tetapi tanpa mengakses sebarang atribut atau kaedah khusus kelas.

Contoh:

Pertimbangkan kod berikut:

class Person:
    def __init__(self, name):
        self.name = name

    @classmethod
    def from_str(cls, name_str):
        return cls(name_str)

    @staticmethod
    def is_valid_name(name):
        return len(name) > 0
Salin selepas log masuk

Kaedah @classmethod from_str mencipta objek Orang daripada rentetan, manakala @staticmethod kaedah is_valid_name menyemak kesahihan nama. Memandangkan is_valid_name melakukan tindakan yang tidak memerlukan akses kepada kejadian tertentu atau data seluruh kelas, ia dihias dengan sewajarnya sebagai kaedah statik.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan