Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengatasi Kaedah Khas pada Contoh Python?
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!