Rumah > pembangunan bahagian belakang > Tutorial Python > Adakah Mengakses Kunci Kamus sebagai Atribut Objek dalam Python adalah Amalan yang Selamat dan Cekap?

Adakah Mengakses Kunci Kamus sebagai Atribut Objek dalam Python adalah Amalan yang Selamat dan Cekap?

Linda Hamilton
Lepaskan: 2024-12-18 03:40:14
asal
224 orang telah melayarinya

Is Accessing Dictionary Keys as Object Attributes in Python a Safe and Efficient Practice?

Mengakses Kekunci Dict Seperti Atribut Objek

Pada asalnya ingin mengakses kunci kamus dengan lebih mudah, anda telah mencipta kelas AttributeDict dengan getattr tersuai Kaedah dan setattr. Walau bagaimanapun, pendekatan ini menimbulkan kebimbangan mengenai batasan yang wujud dan kemungkinan perangkapnya.

Ketiadaan fungsi Python ini di luar kotak menunjukkan potensi kaveat. Satu kelemahan yang ketara ialah potensi ruang nama yang bercanggah antara kunci yang disimpan dan atribut kaedah kamus terbina dalam. Ini boleh membawa kepada tingkah laku yang tidak dijangka, seperti yang dilihat dalam contoh berikut:

d = AttrDict()
d.update({'items':['jacket', 'necktie', 'trousers']})
for k, v in d.items():    # TypeError: 'list' object is not callable
    print "Never reached!"
Salin selepas log masuk

Di sini, data masuk menimpa kaedah kamus .items() dengan senarai, mengakibatkan ralat yang tidak dijangka.

Pendekatan yang lebih berkesan untuk mencapai hasil yang serupa ialah dengan menetapkan subkelas dict() kepada atribut dict dalaman dalam kelas anda. Ini mengekalkan kefungsian kamus asal sambil mendayakan akses atribut kepada kekuncinya:

class AttrDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self
Salin selepas log masuk

Kaedah ini memberikan beberapa kelebihan:

  • Akses kekunci lancar melalui atribut objek (cth., obj.foo )
  • Pengekalan kaedah kelas kamus (cth., .keys())
  • Penyegerakan antara atribut dan item
  • Pengendalian kunci yang tidak wujud dengan betul (menaikkan AttributeError)
  • Sokongan autolengkap tab

Namun, ia juga mempunyai potensi kelemahan:

  • Kemungkinan kebocoran memori dalam versi Python tertentu
  • Amaran pylint mengenai penetapan atribut
  • Berpotensi kekeliruan kerana kelakuannya yang tidak dijangka

Atas ialah kandungan terperinci Adakah Mengakses Kunci Kamus sebagai Atribut Objek dalam Python adalah Amalan yang Selamat dan Cekap?. 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