Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Anda Boleh Memanjangkan Jenis Terbina Dalam Python dengan Kaedah Tersuai?

Bagaimanakah Anda Boleh Memanjangkan Jenis Terbina Dalam Python dengan Kaedah Tersuai?

Barbara Streisand
Barbara Streisandasal
2024-10-24 19:27:02961semak imbas

How Can You Extend Python's Built-in Types with Custom Methods?

Memperluas Jenis Python Terbina dalam dengan Kaedah Tersuai

Dalam Python, jenis terbina dalam seperti dict dan str adalah tidak berubah dan don 't membenarkan penambahan kaedah langsung. Walau bagaimanapun, adalah mungkin untuk mencapai kefungsian yang serupa dengan mensubkelaskan jenis terbina dalam dan menggantikannya dalam ruang nama global.

Sebagai contoh, katakan anda ingin menambah kaedah helloWorld() kepada jenis dict. Walaupun ini tidak boleh dilaksanakan dengan pengubahsuaian langsung, anda boleh mensubkelas dict dan mentakrifkan kaedah dalam subkelas:

class MyDict(dict):
    def helloWorld(self):
        print("Hello world!")

Untuk menggunakan subkelas ini pada semua kamus akan datang, gantikan jenis dict asal dalam ruang nama terbina dalam :

import __builtin__
__builtin__.dict = MyDict

Sekarang, mana-mana kamus yang dicipta akan daripada jenis MyDict dan mempunyai kaedah helloWorld():

my_dict = {}
my_dict.helloWorld()  # Prints "Hello world!"

Walau bagaimanapun, ambil perhatian bahawa objek yang dicipta melalui sintaks literal (cth., {}) akan tetap daripada jenis vanila dict dan tidak akan mempunyai kaedah tersuai:

vanilla_dict = {}
vanilla_dict.helloWorld()  # AttributeError: 'dict' object has no attribute 'helloWorld'

Pendekatan ini menyediakan cara untuk melanjutkan jenis terbina dalam dengan kaedah tersuai, tetapi ia bukan tanpa hadnya . Contohnya, objek sintaks literal kekal vanila dan subkelas tidak mewarisi sebarang atribut atau kaedah tersuai yang ditambahkan pada jenis induk.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Memanjangkan Jenis Terbina Dalam Python dengan Kaedah 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