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
Lepaskan: 2024-12-04 05:12:10
asal
656 orang telah melayarinya

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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

a = A()
setattr(a, "_repr", lambda self: "Overridden")
repr(a)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan