Setiap kali apabila kita mencipta python kelas baharu menyimpan setiap atribut dalam atributdiktyang dipanggil kamus dinamik. Tingkah laku lalai ini nampaknya mudah, kerana ia fleksibel, tetapi apabila anda bekerja dengan sejumlah besar kejadian atau penggunaan memori adalah penting, maka overhed ini boleh menjadi penting.
Python pada asasnya menggunakan kamus untuk menyimpan atribut kelas, tetapi salah satu alternatifnya ialah menggunakanslot. Dengan mentakrifkan nama ini, kami memberitahu Python untuk menggunakan struktur yang lebih statik dan padat yang mengurangkan penggunaan memori dengan ketara. Berikut ialah contoh asas cara menggunakan slot dalam kelas.
import sys class WithoutSlots: def __init__(self, x, y): self.x = x self.y = y class WithSlots: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y obj1 = WithoutSlots(1, 2) obj2 = WithSlots(1, 2) print(sys.getsizeof(obj1.__dict__)) # 296 print(sys.getsizeof(obj2)) # 48
Seperti yang ditunjukkan di atas 'TanpaSlots' menggunakan lebih banyak memori berbanding dengan 'WithSlots'. Fikirkan tentang membuat banyak contoh kelas - Pendekatan manakah yang menjadi pilihan yang lebih baik?
slotmungkin alat yang berguna, tetapi disertakan dengan pengehadan:
obj = WithSlots(1, 2) obj.z = 3 # This will raise an AttributeError
Kita boleh mengatasinya dengan menambahkandiktpadaslot.
Tiada warisan berbilang: setiap kelas asas mesti mengandungislotditakrifkan, jika tidak python akan kembali menggunakan kamus untuk menyimpan atribut instance.
Tiada nilai lalai: Anda perlu memulakan secara eksplisit nilai lalai secara eksplisit dalam kaedah init.
Saya telah menulis beberapa contoh senario terbaik di mana kita boleh menggunakan slot:
Beginilah caraslotdigunakan dalam Python: anda boleh menggunakannya apabila anda pasti anda tidak memerlukan sebarang atribut lain untuk kelas anda dan anda sedang bekerja dengannya sebilangan besar contoh. Dengan mentakrifkanslot, anda memberitahu Python untuk menggunakan struktur yang lebih cekap dan padat untuk menyimpan atribut, yang membantu menjimatkan memori. Ini amat berguna apabila penggunaan memori menjadi kebimbangan atau apabila anda perlu mengoptimumkan prestasi. Ingatlah bahawa denganslot, anda tidak boleh menambah atribut baharu secara dinamik, jadi ia lebih baik digunakan apabila atribut kelas anda ditetapkan dan ditakrifkan dengan baik.
Atas ialah kandungan terperinci Memanfaatkan __slot__ untuk Prestasi Lebih Baik dalam Kelas Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!