Mengapa Saya Tidak Boleh Mengubah Suai Atribut Contoh Objek Vanila dalam Python?

Susan Sarandon
Lepaskan: 2024-11-11 10:27:03
asal
849 orang telah melayarinya

Why Can't I Modify Attributes of a Vanilla Object Instance in Python?

Tidak 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!

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