Rumah >pembangunan bahagian belakang >Tutorial Python >## Bolehkah Anda Meningkatkan Jenis Terbina Dalam Python dengan Kaedah dan Atribut Tersuai?

## Bolehkah Anda Meningkatkan Jenis Terbina Dalam Python dengan Kaedah dan Atribut Tersuai?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 02:56:30651semak imbas

## Can You Enhance Python's Built-in Types with Custom Methods and Attributes?

Bolehkah Kaedah dan Atribut Tersuai Ditambah pada Jenis Python Terbina dalam?

Dalam Python, tidak mungkin mengubah suai secara langsung yang terbina -dalam jenis data seperti dicts. Walau bagaimanapun, teknik yang dikenali sebagai "tampalan monyet" membolehkan subkelas dicipta dan digantikan ke ruang nama global. Ini menyediakan versi dipertingkatkan bagi jenis data asal.

Teknik Menampal Monyet

  1. Buat subkelas yang memanjangkan jenis data asal, menambah kaedah atau atribut yang diingini .
  2. Ganti jenis asal dengan subkelas dalam ruang nama terbina dalam menggunakan __builtin__.

Contoh: Menambah Kaedah first_last() untuk str

<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())  # Output: 14
print(str(0).first_last())  # Output: 00
print(str('').first_last())  # Output: ''</code>

Batasan:

Teknik ini mempunyai beberapa kaveat:

  • Objek yang dibuat dengan sintaks literal (cth., '0') akan tidak mempunyai kaedah/atribut tambahan.
  • Versi asal jenis hilang dan tidak boleh dipulihkan dengan mudah.

Atas ialah kandungan terperinci ## Bolehkah Anda Meningkatkan Jenis Terbina Dalam Python 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