Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengatasi Kaedah Khas pada Contoh Python?

Bagaimanakah Saya Boleh Mengatasi Kaedah Khas pada Contoh Python?

Linda Hamilton
Linda Hamiltonasal
2024-12-04 05:12:10611semak imbas

How Can I Override Special Methods on a Python Instance?

Mengatasi Kaedah Khas pada Contoh

Dalam Python, matlamat yang sama untuk pembangun adalah untuk mengatasi kaedah khas pada tika. Walau bagaimanapun, ini biasanya tidak mungkin kerana kaedah khas biasanya hanya dipanggil pada kelas itu sendiri.

Masalah:

Untuk menggambarkan konsep ini, pertimbangkan coretan kod berikut:

class A(object):
    pass

def __repr__(self):
    return "A"

from types import MethodType
a = A()
a
repr(a)
setattr(a, "__repr__", MethodType(__repr__, a, a.__class__))
a
repr(a)

Seperti yang dilihat di atas, mengatasi __repr__ terus pada kejadian tidak membuahkan hasil yang diharapkan. repr(a) mengembalikan perwakilan kelas lalai, bukan nilai pulangan kaedah yang ditindih.

Penyelesaian:

Untuk mencapai kaedah khas yang mengatasi pada contoh, anda boleh menggunakan pendekatan tidak langsung. Takrifkan kaedah khas sebagai pembalut yang memanggil kaedah dalaman yang ditindih:

class A(object):
    def __repr__(self):
        return self._repr()
    def _repr(self):
        return object.__repr__(self)

Kini, anda boleh mengatasi __repr__ pada kejadian dengan menulis ganti _repr(). Contohnya:

a = A()
setattr(a, "_repr", lambda self: "Overridden")
repr(a)

Kod yang dikemas kini ini akan mengeluarkan perwakilan rentetan yang diganti.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengatasi Kaedah Khas pada Contoh 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