0Pricing
Python Academy · Pelajaran

@classmethod dan @staticmethod

Definisikan method tingkat class dan method statis dengan decorator yang sesuai.

@classmethod dan @staticmethod adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Pendahuluan

@classmethod menerima kelas sebagai argumen pertama. @staticmethod tidak menerima apa pun yang khusus. Keduanya didefinisikan pada kelas.

Instance vs Kelas vs Statis

Metode biasa menerima self. Metode kelas menerima cls. Metode statis tidak menerima keduanya. Pilih berdasarkan data yang Anda perlukan.
class Demo:
    def instance(self): return 'instance'
    @classmethod
    def class_m(cls): return f'class: {cls.__name__}'
    @staticmethod
    def static_m(): return 'static'
d = Demo()
print(d.instance())
print(Demo.class_m())
print(Demo.static_m())

@classmethod sebagai Pabrik

Penggunaan yang paling umum adalah sebagai konstruktor alternatif. Date.from_string('2024-01-15') dapat digunakan alih-alih melakukan penguraian di dalam __init__.
class Date:
    def __init__(self, y,m,d): self.y,self.m,self.d=y,m,d
    @classmethod
    def today(cls):
        from datetime import date
        d = date.today()
        return cls(d.year, d.month, d.day)
    def __repr__(self): return f'{self.y}-{self.m}-{self.d}'
print(Date.today())

@classmethod dengan Pewarisan

cls dalam classmethod merujuk pada subkelas yang sebenarnya, bukan kelas dasar. Hal ini membuat metode pabrik bekerja dengan benar pada subkelas.
class Animal:
    @classmethod
    def create(cls, name):
        return cls(name)
    def __init__(self, name): self.name = name
class Dog(Animal): pass
d = Dog.create('Rex')
print(type(d).__name__, d.name)

@staticmethod untuk Utilitas

Metode statis adalah fungsi biasa yang secara logis dikelompokkan bersama sebuah kelas. Metode ini tidak dapat mengakses data kelas atau instance.
class MathHelper:
    @staticmethod
    def clamp(value, lo, hi):
        return max(lo, min(hi, value))
print(MathHelper.clamp(15, 0, 10))
print(MathHelper.clamp(-5, 0, 10))

@staticmethod vs Fungsi Modul

Jika sebuah fungsi tidak memerlukan kelas, fungsi tersebut dapat menjadi fungsi tingkat modul. Gunakan @staticmethod hanya jika fungsi itu secara logis termasuk dalam kelas.
class Validator:
    @staticmethod
    def is_email(s): return '@' in s and '.' in s
print(Validator.is_email('user@example.com'))
print(Validator.is_email('not-an-email'))

Memanggil dari Instance

Anda dapat memanggil @classmethod dan @staticmethod pada instance, tetapi perilaku cls/tanpa argumen pertama tetap tidak berubah.
class C:
    @classmethod
    def who(cls): return cls.__name__
    @staticmethod
    def pi(): return 3.14
c = C()
print(c.who())
print(c.pi())

Metode Kelas untuk Singleton

classmethod dapat menerapkan pola singleton dengan memeriksa apakah instance sudah ada.
class Singleton:
    _instance = None
    @classmethod
    def get(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance
a = Singleton.get()
b = Singleton.get()
print(a is b)

Menimpa Classmethod

Subkelas dapat menimpa classmethod. cls kemudian menjadi subkelas, sehingga polimorfisme tetap terjaga.
class Base:
    @classmethod
    def info(cls): return f'{cls.__name__} info'
class Child(Base): pass
print(Base.info())
print(Child.info())

Pemeriksaan Tipe dengan cls

Di dalam classmethod, cls adalah kelas yang sebenarnya. Gunakan cls() untuk membuat instance—jangan menuliskan nama kelas secara langsung.
class Shape:
    @classmethod
    def make(cls):
        return cls()  # NOT Shape()
class Square(Shape): pass
print(type(Square.make()).__name__)

Menggabungkan dengan @property

Nilai yang disimpan dalam tembolok pada tingkat kelas dapat menggabungkan @classmethod dan atribut kelas untuk caching yang berlaku di seluruh kelas.
class Config:
    _data = None
    @classmethod
    def load(cls):
        if cls._data is None:
            cls._data = {'debug': True}
        return cls._data
print(Config.load())

Pemeriksaan Singkat

Apa yang dimaksud dengan cls dalam @classmethod?

Ringkasan

@classmethod menerima cls: gunakan untuk pabrik, konstruktor alternatif, dan singleton. @staticmethod tidak menerima apa pun: gunakan untuk utilitas. cls adalah kelas (atau subkelas) yang sebenarnya.

Lanjutkan

Kemajuan Anda sangat baik! Lanjutkan untuk menguasai konsep berikutnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “@classmethod dan @staticmethod” gratis?

Ya — teks lengkap “@classmethod dan @staticmethod” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “@classmethod dan @staticmethod”?

Definisikan method tingkat class dan method statis dengan decorator yang sesuai. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “@classmethod dan @staticmethod” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fungsi sebagai Objek Kelas Satu
  2. Menulis Decorator Kustom
  3. Decorator @property
  4. @classmethod dan @staticmethod
← Kembali ke Python Academy