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!"
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
Kaedah ini memberikan beberapa kelebihan:
Namun, ia juga mempunyai potensi kelemahan:
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!