Rumah >pembangunan bahagian belakang >Tutorial Python >Apakah Perbezaan antara Kaedah Terikat, Tidak Terikat dan Statik dalam Python?

Apakah Perbezaan antara Kaedah Terikat, Tidak Terikat dan Statik dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-11-15 10:19:02900semak imbas

What are the Differences between Bound, Unbound, and Static Methods in Python?

Perbezaan Kaedah Kelas dalam Python: Bound, Unbound dan Static

Dalam Python, perbezaan antara kaedah terikat, tidak terikat dan statik adalah penting untuk reka bentuk kelas yang berkesan.

Kaedah Terikat dan Tidak Terikat

Tidak seperti kebanyakan bahasa berorientasikan objek lain, Python kaedah kelas tidak statik secara lalai. Apabila contoh kelas memanggil fungsi ahli, ia diterjemahkan ke dalam panggilan kepada kaedah tidak terikat dengan contoh sebagai hujah pertama. Sebagai contoh, pertimbangkan kod berikut:

class Test(object):
  def method_one(self):
    print "Called method_one"

Memanggil method_one pada contoh a_test akan menghasilkan:

a_test.method_one()
=> Test.method_one(a_test)

Kaedah Statik

Untuk menentukan kaedah statik yang digunakan pada kelas dan bukannya contoh, gunakan penghias @staticmethod. Penghias ini mengarahkan metaclass untuk mencipta kaedah tidak terikat. Contohnya:

class Test(object):
    @staticmethod
    def method_two():
        print "Called method_two"

Kini, kedua-dua contoh dan kelas boleh menggunakan method_two:

a_test = Test()
a_test.method_one()
a_test.method_two()
Test.method_two()

Memanggil method_two tanpa instance tidak akan menimbulkan ralat, tidak seperti method_one, yang menjangkakan contoh untuk terikat kepadanya.

Atas ialah kandungan terperinci Apakah Perbezaan antara Kaedah Terikat, Tidak Terikat dan Statik 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