


Mengapa Saya Tidak Boleh Mengubah Suai Atribut Contoh Objek Vanila dalam Python?
Nov 11, 2024 am 10:27 AMTidak Dapat Mengubah Suai Atribut Instance "objek"
Apabila cuba memberikan atribut kepada contoh objek vanila seperti o.attr = 'hello', AttributeError dinaikkan , menunjukkan bahawa objek tidak mempunyai atribut yang ditentukan. Walau bagaimanapun, ini bukan isu untuk kelas yang mewarisi daripada objek, seperti Sub, yang boleh menetapkan atribut seperti s.attr = 'hello'. Mengapa ini berlaku memerlukan pemahaman tentang infrastruktur dalaman Python.
Mekanisme Tugasan Atribut Python
Untuk menyokong penetapan atribut dinamik, objek mesti mempunyai __dict__, yang berfungsi sebagai kamus dengan atribut arbitrari boleh disimpan. Tanpa __dict__, tiada storan tersedia untuk atribut baharu.
Sesuatu contoh objek tidak mempunyai __dict__. Memasukkan satu dalam definisi objek akan mengakibatkan isu pergantungan bulat, kerana dict juga mewarisi daripada objek. Selain itu, memberikan __dict__ kepada setiap objek akan memperkenalkan overhed memori yang tidak diperlukan untuk objek yang tidak memerlukan penetapan atribut dinamik.
Penugasan Kelas dan Atribut Dinamik
Apabila kelas dicipta yang mewarisi daripada objek , keadaan berubah. Penciptaan contoh kelas mencetuskan peruntukan __dict__. Ini membenarkan subkelas objek untuk memiliki keupayaan tugasan atribut dinamik, tetapi dengan kos memori yang dikaitkan dengan fleksibiliti tambahan.
Mengoptimumkan Tugasan Atribut: slot
Python menyediakan pengoptimuman teknik, __slots__, untuk mengehadkan atribut yang boleh diberikan kepada objek. Dengan menentukan jujukan nama rentetan dalam atribut __slots__, kelas mengarahkan Python untuk tidak mencipta __dict__ dan sebaliknya memperuntukkan slot atribut yang ditentukan sahaja. Pendekatan ini mengurangkan overhed memori dan boleh berguna dalam situasi di mana objek mempunyai set atribut tetap.
Ringkasnya, ketidakupayaan untuk menetapkan atribut kepada kejadian objek berpunca daripada ketiadaan __dict__, yang akan memperkenalkan overhed memori untuk objek tanpa keupayaan penetapan atribut dinamik. Contoh kelas, walau bagaimanapun, mempunyai __dict__ dan boleh menetapkan atribut secara dinamik. Atribut __slots__ menyediakan pilihan pengoptimuman memori dengan mengehadkan penetapan atribut kepada set tetap.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mengubah Suai Atribut Contoh Objek Vanila dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?

Cara Melaksanakan Struktur Data Anda Sendiri di Python
