Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh melanjutkan jenis Python terbina dalam dengan kaedah dan atribut tersuai?

Bagaimanakah saya boleh melanjutkan jenis Python terbina dalam dengan kaedah dan atribut tersuai?

Patricia Arquette
Patricia Arquetteasal
2024-10-24 17:01:02367semak imbas

How can I extend built-in Python types with custom methods and attributes?

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!

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