Pertimbangkan coretan kod di bawah:
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A() print(a) # <__main__.A object at 0x00AC6990> print(repr(a)) # '<__main__.A object at 0x00AC6990>' setattr(a, "__repr__", MethodType(__repr__, a, a.__class__)) print(a) # <__main__.A object at 0x00AC6990> print(repr(a)) # '<__main__.A object at 0x00AC6990>'
Seperti yang diperhatikan, kaedah __repr__ tersuai tidak dipanggil contoh a. Untuk memahami tingkah laku ini, adalah penting untuk ambil perhatian bahawa:
Dalam CPython (jurubahasa Python standard), kaedah khas dengan nama yang dikelilingi oleh __ biasanya tidak digunakan pada kejadian tetapi pada kelas. Akibatnya, percubaan untuk mengatasi __repr__ secara langsung pada kejadian tidak akan menghasilkan hasil yang diharapkan.
Untuk mengatasi had ini, seseorang boleh memanfaatkan strategi berikut:
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
Di sini, __repr__ memanggil kaedah pembantu _repr, yang kemudiannya memanggil pelaksanaan __repr__ lalai untuk kelas objek. Dengan mengatasi _repr, kami boleh mengatasi __repr__ pada kejadian dengan berkesan.
Atas ialah kandungan terperinci Mengapa Mengatasi `__repr__` pada Contoh Tidak Berfungsi dalam Python dan Bagaimana Ia Boleh Dicapai Dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!