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

Patricia Arquette
Lepaskan: 2024-10-24 17:01:02
asal
375 orang telah melayarinya

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!