Panggilan fungsi di kelas python

Jika Anda mengembangkan pemahaman intuitif untuk perbedaan mereka, Anda akan dapat menulis Python berorientasi objek yang mengomunikasikan maksudnya dengan lebih jelas dan akan lebih mudah dipertahankan dalam jangka panjang

Bonus Gratis. Klik di sini untuk mendapatkan akses ke Lembar Cheat OOP Python gratis yang mengarahkan Anda ke tutorial, video, dan buku terbaik untuk mempelajari lebih lanjut tentang Pemrograman Berorientasi Objek dengan Python

Metode Instans, Kelas, dan Statis — Gambaran Umum

Mari kita mulai dengan menulis kelas (Python 3) yang berisi contoh sederhana untuk ketiga jenis metode tersebut

class MyClass:
    def method(self):
        return 'instance method called', self

    @classmethod
    def classmethod(cls):
        return 'class method called', cls

    @staticmethod
    def staticmethod():
        return 'static method called'

CATATAN. Untuk pengguna Python 2. Dekorator

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
4 dan
>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
5 tersedia mulai dari Python 2. 4 dan contoh ini akan berfungsi sebagaimana adanya. Alih-alih menggunakan deklarasi
>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
_6 biasa, Anda mungkin memilih untuk mendeklarasikan kelas gaya baru yang diwarisi dari
>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
7 dengan sintaks
>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
8. Selain itu, Anda baik untuk pergi

Hilangkan iklan

Metode Instance

Metode pertama pada

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
_9, disebut
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
0, adalah metode instance reguler. Itu adalah jenis metode dasar tanpa embel-embel yang akan sering Anda gunakan. Anda dapat melihat metode mengambil satu parameter,
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1, yang menunjuk ke sebuah instance dari
>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
9 ketika metode dipanggil (tapi tentu saja metode instance dapat menerima lebih dari satu parameter saja)

Melalui parameter

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1, metode instance dapat dengan bebas mengakses atribut dan metode lain pada objek yang sama. Ini memberi mereka banyak kekuatan ketika memodifikasi status objek

Tidak hanya mereka dapat mengubah status objek, metode instance juga dapat mengakses kelas itu sendiri melalui atribut

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
4. Ini berarti metode instance juga dapat mengubah status kelas

Metode Kelas

Mari kita bandingkan dengan metode kedua,

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
5. Saya menandai metode ini dengan dekorator untuk menandainya sebagai metode kelas

Alih-alih menerima parameter

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1, metode kelas mengambil parameter
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
8 yang menunjuk ke kelas—dan bukan instance objek—ketika metode dipanggil

Karena metode kelas hanya memiliki akses ke argumen

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
8 ini, ia tidak dapat mengubah status instance objek. Itu akan membutuhkan akses ke
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1. Namun, metode kelas masih bisa mengubah status kelas yang berlaku di semua instance kelas

Metode Statis

Metode ketiga,

>>> obj.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)
_1 ditandai dengan dekorator untuk menandainya sebagai metode statis

Jenis metode ini tidak menggunakan parameter

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1 atau
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
8 (tapi tentu saja bebas menerima sejumlah parameter lain yang berubah-ubah)

Oleh karena itu metode statis tidak dapat mengubah status objek atau status kelas. Metode statis dibatasi pada data apa yang dapat mereka akses - dan metode tersebut terutama merupakan cara untuk menamai metode Anda

Mari Kita Lihat Mereka Beraksi

Saya tahu diskusi ini cukup teoretis sampai saat ini. Dan saya yakin penting bagi Anda untuk mengembangkan pemahaman intuitif tentang perbedaan jenis metode ini dalam praktiknya. Kami akan membahas beberapa contoh konkret sekarang

Mari kita lihat bagaimana metode ini beraksi saat kita memanggilnya. Kami akan mulai dengan membuat instance kelas dan kemudian memanggil tiga metode berbeda di dalamnya

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
_9 diatur sedemikian rupa sehingga setiap implementasi metode mengembalikan tuple yang berisi informasi bagi kita untuk melacak apa yang terjadi — dan bagian mana dari kelas atau objek yang dapat diakses metode tersebut

Inilah yang terjadi ketika kita memanggil metode instan

>>>

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
_

Ini menegaskan bahwa

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_0 (metode instance) memiliki akses ke instance objek (dicetak sebagai
>>> obj.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)
7) melalui argumen
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
1

Saat metode dipanggil, Python mengganti argumen

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
1 dengan objek instance,
>>> obj.staticmethod()
'static method called'
0. Kita bisa mengabaikan gula sintaksis dari sintaks dot-call (
>>> obj.staticmethod()
'static method called'
1) dan meneruskan objek instance secara manual untuk mendapatkan hasil yang sama

>>>

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_

Dapatkah Anda menebak apa yang akan terjadi jika Anda mencoba memanggil metode tersebut tanpa membuat instance terlebih dahulu?

Omong-omong, metode instance juga dapat mengakses kelas itu sendiri melalui atribut

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
4. Ini membuat metode instance kuat dalam hal pembatasan akses - mereka dapat memodifikasi status pada instance objek dan kelas itu sendiri

Mari kita coba metode kelas selanjutnya

>>>

>>> obj.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)
_

Memanggil

>>> obj.staticmethod()
'static method called'
_3 menunjukkan kepada kita bahwa ia tidak memiliki akses ke objek
>>> obj.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)
7, tetapi hanya ke objek
>>> obj.staticmethod()
'static method called'
5, yang mewakili kelas itu sendiri (segala sesuatu dalam Python adalah objek, bahkan kelas itu sendiri)

Perhatikan bagaimana Python secara otomatis meneruskan kelas sebagai argumen pertama ke fungsi saat kita memanggil

>>> obj.staticmethod()
'static method called'
6. Memanggil metode dalam Python melalui sintaks titik memicu perilaku ini. Parameter
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1 pada metode instan bekerja dengan cara yang sama

Harap dicatat bahwa penamaan parameter ini

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_1 dan
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
8 hanyalah sebuah konvensi. Anda dapat dengan mudah menamainya
>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
0 dan
>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
1 dan mendapatkan hasil yang sama. Yang penting adalah mereka diposisikan pertama dalam daftar parameter untuk metode ini

Saatnya memanggil metode statis sekarang

>>>

>>> obj.staticmethod()
'static method called'
_

Apakah Anda melihat bagaimana kami memanggil

>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
_2 pada objek dan berhasil melakukannya?

Di belakang layar, Python hanya memberlakukan pembatasan akses dengan tidak meneruskan argumen

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
1 atau
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
8 saat metode statis dipanggil menggunakan sintaks titik

Ini menegaskan bahwa metode statis tidak dapat mengakses status objek maupun status kelas. Mereka bekerja seperti fungsi biasa tetapi milik ruang nama kelas (dan setiap instance).

Sekarang, mari kita lihat apa yang terjadi saat kita mencoba memanggil metode ini di kelas itu sendiri - tanpa membuat instance objek terlebih dahulu

>>>

>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
_

Kami dapat memanggil

>>> obj.staticmethod()
'static method called'
_3 dan
>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
2 baik-baik saja, tetapi mencoba memanggil metode instance
>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
7 gagal dengan
>>> MyClass.classmethod()
('class method called', <class MyClass at 0x101a2f4c8>)

>>> MyClass.staticmethod()
'static method called'

>>> MyClass.method()
TypeError: unbound method method() must
    be called with MyClass instance as first
    argument (got nothing instead)
8

Dan inilah yang diharapkan — kali ini kita tidak membuat instance objek dan mencoba memanggil fungsi instance secara langsung pada cetak biru kelas itu sendiri. Ini berarti tidak ada cara bagi Python untuk mengisi argumen

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
1 dan karenanya panggilan gagal

Ini seharusnya membuat perbedaan antara ketiga jenis metode ini sedikit lebih jelas. Tapi saya tidak akan berhenti di situ. Dalam dua bagian berikutnya saya akan membahas dua contoh yang sedikit lebih realistis tentang kapan menggunakan jenis metode khusus ini

Saya akan mendasarkan contoh saya pada kelas

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0 yang sederhana ini

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'

>>>

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
_

Catatan. Contoh kode ini dan yang selanjutnya dalam tutorial menggunakan Python 3. 6 f-string untuk menyusun string yang dikembalikan oleh

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
1. Di Python 2 dan versi Python 3 sebelum 3. 6 Anda akan menggunakan ekspresi pemformatan string yang berbeda, misalnya

def __repr__(self):
    return 'Pizza(%r)' % self.ingredients

Hilangkan iklan

Pabrik Pizza Lezat Dengan >>> obj = MyClass() >>> obj.method() ('instance method called', <MyClass instance at 0x10205d190>) 5

Jika Anda pernah mengenal pizza di dunia nyata, Anda akan tahu bahwa ada banyak variasi lezat yang tersedia

Pizza(['mozzarella', 'tomatoes'])
Pizza(['mozzarella', 'tomatoes', 'ham', 'mushrooms'])
Pizza(['mozzarella'] * 4)

Orang Italia menemukan taksonomi pizza mereka berabad-abad yang lalu, jadi semua jenis pizza yang lezat ini memiliki nama mereka sendiri. Kami akan melakukannya dengan baik untuk mengambil keuntungan dari itu dan memberi pengguna kelas

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0 kami antarmuka yang lebih baik untuk membuat objek pizza yang mereka dambakan

Cara yang bagus dan bersih untuk melakukannya adalah dengan menggunakan metode kelas sebagai fungsi pabrik untuk berbagai jenis pizza yang dapat kita buat

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
_0

Perhatikan bagaimana saya menggunakan argumen

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
_8 di
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
5 dan
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
6 metode pabrik alih-alih memanggil konstruktor
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0 secara langsung

Ini adalah trik yang dapat Anda gunakan untuk mengikuti prinsip Don't Repeat Yourself (DRY). Jika kami memutuskan untuk mengganti nama kelas ini di beberapa titik, kami tidak perlu mengingat memperbarui nama konstruktor di semua fungsi pabrik metode kelas

Sekarang, apa yang bisa kita lakukan dengan metode pabrik ini?

>>>

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
1

Seperti yang Anda lihat, kita dapat menggunakan fungsi pabrik untuk membuat objek

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
0 baru yang dikonfigurasi seperti yang kita inginkan. Mereka semua menggunakan konstruktor
class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
_9 yang sama secara internal dan hanya menyediakan jalan pintas untuk mengingat semua berbagai bahan

Cara lain untuk melihat penggunaan metode kelas ini adalah bahwa mereka memungkinkan Anda untuk menentukan konstruktor alternatif untuk kelas Anda

Python hanya mengizinkan satu metode

class Pizza:
    def __init__(self, ingredients):
        self.ingredients = ingredients

    def __repr__(self):
        return f'Pizza({self.ingredients!r})'
_9 per kelas. Dengan menggunakan metode kelas, dimungkinkan untuk menambahkan konstruktor alternatif sebanyak yang diperlukan. Ini dapat membuat antarmuka untuk kelas Anda mendokumentasikan diri sendiri (hingga tingkat tertentu) dan menyederhanakan penggunaannya

Kapan Menggunakan Metode Statis

Sedikit lebih sulit untuk memberikan contoh yang baik di sini. Tapi beri tahu Anda apa, saya akan terus meregangkan analogi pizza semakin tipis dan tipis… (yum. )

Inilah yang saya pikirkan

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
_2

Sekarang apa yang saya ubah di sini?

Saya juga menambahkan metode instan

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
3 yang menghitung dan mengembalikan area pizza (ini juga akan menjadi kandidat yang baik untuk
>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
4 — tapi hei, ini hanya contoh mainan)

Alih-alih menghitung luas secara langsung dalam

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
_3, menggunakan rumus luas lingkaran yang terkenal, saya memfaktorkannya ke metode statis
>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
6 yang terpisah

Mari kita coba

>>>

>>> obj = MyClass()
>>> obj.method()
('instance method called', <MyClass instance at 0x10205d190>)
3

Tentu, ini sedikit contoh sederhana, tetapi tidak apa-apa membantu menjelaskan beberapa manfaat yang diberikan metode statis

Seperti yang telah kita pelajari, metode statis tidak dapat mengakses status kelas atau instance karena mereka tidak menggunakan argumen

>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
8 atau
>>> MyClass.method(obj)
('instance method called', <MyClass instance at 0x10205d190>)
1. Itu adalah batasan yang besar — ​​tetapi ini juga merupakan sinyal yang bagus untuk menunjukkan bahwa metode tertentu tidak bergantung pada hal lain di sekitarnya

Dalam contoh di atas, jelas bahwa ________52______6 tidak dapat mengubah kelas atau turunan kelas dengan cara apa pun. (Tentu, Anda selalu bisa mengatasinya dengan variabel global tapi bukan itu intinya di sini. )

Sekarang, mengapa itu berguna?

Menandai metode sebagai metode statis bukan hanya petunjuk bahwa metode tidak akan mengubah status kelas atau instance — pembatasan ini juga diberlakukan oleh runtime Python

Teknik seperti itu memungkinkan Anda untuk berkomunikasi dengan jelas tentang bagian-bagian arsitektur kelas Anda sehingga pekerjaan pengembangan baru dipandu secara alami agar terjadi dalam batasan yang ditetapkan ini. Tentu saja, cukup mudah untuk menentang batasan ini. Namun dalam praktiknya mereka sering membantu menghindari modifikasi yang tidak disengaja yang bertentangan dengan desain aslinya

Dengan kata lain, menggunakan metode statis dan metode kelas adalah cara untuk mengomunikasikan niat pengembang sambil menegakkan niat itu cukup untuk menghindari sebagian besar kesalahan kesalahan dan bug yang akan merusak desain

Diterapkan dengan hemat dan ketika itu masuk akal, menulis beberapa metode Anda dengan cara itu dapat memberikan manfaat pemeliharaan dan memperkecil kemungkinan pengembang lain menggunakan kelas Anda secara tidak benar

Metode statis juga bermanfaat dalam menulis kode pengujian

Karena metode

>>> Pizza(['cheese', 'tomatoes'])
Pizza(['cheese', 'tomatoes'])
_6 benar-benar independen dari kelas lainnya, lebih mudah untuk mengujinya

Kita tidak perlu khawatir tentang menyiapkan contoh kelas yang lengkap sebelum kita dapat menguji metode ini dalam pengujian unit. Kami hanya bisa menembak seperti kami akan menguji fungsi biasa. Sekali lagi, ini membuat perawatan di masa mendatang lebih mudah

Hilangkan iklan

Takeaway kunci

  • Metode instans membutuhkan instans kelas dan dapat mengakses instans melalui
    >>> MyClass.method(obj)
    ('instance method called', <MyClass instance at 0x10205d190>)
    
    1
  • Metode kelas tidak memerlukan instance kelas. Mereka tidak dapat mengakses instance (
    >>> MyClass.method(obj)
    ('instance method called', <MyClass instance at 0x10205d190>)
    
    _1) tetapi mereka memiliki akses ke kelas itu sendiri melalui
    >>> MyClass.method(obj)
    ('instance method called', <MyClass instance at 0x10205d190>)
    
    8
  • Metode statis tidak memiliki akses ke
    >>> MyClass.method(obj)
    ('instance method called', <MyClass instance at 0x10205d190>)
    
    8 atau
    >>> MyClass.method(obj)
    ('instance method called', <MyClass instance at 0x10205d190>)
    
    1. Mereka bekerja seperti fungsi biasa tetapi milik ruang nama kelas
  • Metode statis dan kelas berkomunikasi dan (hingga tingkat tertentu) menegakkan niat pengembang tentang desain kelas. Ini dapat memiliki manfaat pemeliharaan

Tandai sebagai Selesai

Tonton Sekarang Tutorial ini memiliki kursus video terkait yang dibuat oleh tim Real Python. Tonton bersama dengan tutorial tertulis untuk memperdalam pemahaman Anda. Jenis Metode OOP dengan Python. @classmethod vs @staticmethod vs Metode Instance

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Panggilan fungsi di kelas python

Kirimi Saya Trik Python »

Tentang Dan Bader

Panggilan fungsi di kelas python
Panggilan fungsi di kelas python

Dan Bader adalah pemilik dan pemimpin redaksi Real Python dan pengembang utama realpython. platform pembelajaran com. Dan telah menulis kode selama lebih dari 20 tahun dan memegang gelar master dalam ilmu komputer

» Lebih lanjut tentang Dan


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Panggilan fungsi di kelas python

Aldren

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurut anda?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami


Mencari percakapan waktu nyata? . Selamat Pythoning

Terus belajar

Kategori Tutorial Terkait. python perantara

Kursus Video yang Direkomendasikan. Jenis Metode OOP dengan Python. @classmethod vs @staticmethod vs Metode Instance

Bagaimana Anda memanggil fungsi di kelas yang sama dengan Python?

Metode instance adalah fungsi yang dibangun ke dalam definisi kelas dari suatu objek dan memerlukan instance dari kelas tersebut untuk dipanggil. Untuk memanggil metode, Anda perlu memenuhi fungsi dengan self . . Misalnya, di kelas yang berisi fungsi first() dan second(), first() dapat memanggil second().

Bagaimana cara memanggil fungsi kelas tanpa membuat objek Python?

Namun Anda dapat melakukan hal lain. memanggil metode di kelas tanpa membuat objek. Demonstrasi metode statis di bawah ini. Tentukan kelas dengan metode. Tambahkan kata kunci @staticmethod di atasnya untuk membuatnya statis .