Pelanjutan Jenis Python Terbina dalam dengan Kaedah dan Atribut Tersuai
Dalam Python, anda mungkin menghadapi senario di mana anda ingin melanjutkan terbina- dalam jenis dengan kaedah atau atribut tambahan. Walau bagaimanapun, mengubah jenis ini secara langsung tidak dibenarkan.
Sebagai contoh, jika anda cuba menambah kaedah helloWorld() pada jenis dict seperti yang ditunjukkan dalam JavaScript, anda akan mendapati bahawa pendekatan sedemikian tidak disokong.
Penyelesaian Menggunakan Subkelas dan Penggantian Ruang Nama
Walaupun anda tidak boleh menambah jenis asal secara langsung, terdapat penyelesaian yang bijak. Dengan mensubkelaskan jenis sasaran dan seterusnya menggantikannya dalam ruang nama terbina dalam/global, anda boleh meniru gelagat yang diingini dengan berkesan.
Berikut ialah pelaksanaan dalam Python:
<code class="python"># Built-in namespace import __builtin__ # Extended subclass class mystr(str): def first_last(self): if self: return self[0] + self[-1] else: return '' # Substitute the original str with the subclass on the built-in namespace __builtin__.str = mystr print(str(1234).first_last()) # 14 print(str(0).first_last()) # 00 print(str('').first_last()) # '' # Note that objects created by literal syntax will not have the extended methods print('0'.first_last()) # AttributeError: 'str' object has no attribute 'first_last'</code>
Dalam contoh ini , subkelas mystr memanjangkan jenis str dengan menambah kaedah first_last(). Tugasan __builtin__.str mengubah hala semua panggilan str terbina dalam untuk menggunakan subkelas yang diubah suai. Akibatnya, objek yang dibuat instant dengan pembina str() terbina dalam kini mempunyai kaedah first_last().
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa objek yang dibuat menggunakan sintaks literal ('rentetan') akan kekal sebagai contoh jenis str yang tidak diubah suai dan tidak akan mewarisi kaedah tersuai.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melanjutkan jenis Python terbina dalam dengan kaedah dan atribut tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!