Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menambah Kaedah pada Objek Python Sedia Ada?

Bagaimanakah Saya Boleh Menambah Kaedah pada Objek Python Sedia Ada?

Linda Hamilton
Linda Hamiltonasal
2024-12-17 14:51:151044semak imbas

How Can I Add Methods to Existing Python Objects?

Menambah Kaedah pada Contoh Objek Sedia Ada dalam Python

Dalam Python, biasanya tidak digalakkan untuk menambah kaedah pada objek sedia ada (iaitu, bukan dalam definisi kelas). Walau bagaimanapun, terdapat beberapa pengecualian apabila ia mungkin perlu.

Kaedah Terikat lwn. Fungsi

Dalam Python, kaedah dibezakan daripada fungsi dengan terikat pada contoh objek . Apabila kaedah dipanggil, tika itu diluluskan secara automatik sebagai hujah pertama.

Fungsi, sebaliknya, tidak terikat pada mana-mana kejadian tertentu dan mesti digunakan secara eksplisit dengan hujah yang sesuai.

Mengubah Suai Atribut Kelas

Jika anda ingin menambah kaedah pada semua kejadian kelas, anda hanya boleh mengubah suai definisi kelas:

class A:
    def bar(self):
        print("bar")

a = A()
a.bar()  # Output: "bar"

Mengubah suai Kejadian Individu

Walau bagaimanapun, jika anda perlu menambah kaedah pada contoh tertentu kelas, perkara menjadi sedikit lebih rumit. Anda tidak boleh menetapkan fungsi secara langsung kepada atribut instance, kerana ia tidak akan terikat:

def barFighters():
    print("barFighters")

a.barFighters = barFighters
a.barFighters()  # TypeError: barFighters() takes exactly 1 argument

Fungsi Mengikat dengan MethodType

Untuk mengikat fungsi dengan betul kepada contoh objek, anda boleh menggunakan fungsi MethodType daripada modul jenis:

import types

a.barFighters = types.MethodType(barFighters, a)
a.barFighters()  # Output: "barFighters"

Pengikatan kaedah ini memastikan bahawa fungsi itu digunakan dengan contoh sebagai hujah pertama apabila dipanggil.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Kaedah pada Objek Python Sedia Ada?. 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