Mengapa Menggunakan 'eval' Boleh Berisiko untuk Tetapan Atribut Dinamik dalam Python
Dalam Python, fungsi 'eval' membolehkan anda melaksanakan rentetan sebagai kod Python. Walaupun nampaknya mudah untuk menetapkan atribut secara dinamik dalam kelas, menggunakan 'eval' secara amnya dianggap sebagai amalan buruk.
Risiko Menggunakan 'eval'
Penyelesaian Alternatif: Menggunakan 'setattr'
Fungsi 'setattr' menyediakan cara yang lebih selamat dan cekap untuk menetapkan atribut secara dinamik. Ia memerlukan tiga hujah:
Sebagai contoh, kod berikut menggunakan 'setattr' untuk menetapkan atribut dalam 'Lagu' kelas:
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: setattr(self, att.lower(), None) def set_detail(self, key, val): if key in self.attsToStore: setattr(self, key.lower(), val)
Kesimpulan
Walaupun 'eval' mungkin kelihatan menawarkan cara yang mudah untuk menetapkan atribut secara dinamik, ia menimbulkan risiko yang ketara dan harus dielakkan memihak alternatif yang lebih selamat dan cekap seperti 'setattr'.
Atas ialah kandungan terperinci Mengapakah menggunakan `eval()` untuk tetapan atribut dinamik dalam Python berisiko, dan apakah alternatif yang lebih selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!