객체 지향 프로그래밍의 맥락에서 eval 함수의 사용은 잠재적인 보안 위험과 단점으로 인해 일반적으로 권장되지 않습니다. 다음 클래스를 고려하십시오.
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: exec 'self.%s=None'%(att.lower()) in locals() def setDetail(self, key, val): if key in self.attsToStore: exec 'self.%s=val'%(key.lower()) in locals()
이 코드는 속성을 동적으로 설정하고 검색하는 데 편리해 보일 수 있지만 다음과 같은 위험이 있습니다.
이러한 위험 없이 동적 속성 할당 문제를 해결하려면 setattr 함수를 대신 사용할 수 있습니다.
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: setattr(self, att.lower(), None) def setDetail(self, key, val): if key in self.attsToStore: setattr(self, key.lower(), val)
setattr을 사용하면 잠재적인 보안 및 디버깅 문제 없이 Song 개체의 속성을 동적으로 수정할 수 있습니다. eval.
드문 경우 eval 또는 exec 사용이 필요할 수 있지만, 이러한 관행을 신중하게 채택하는 것은 취약점을 방지하고 코드 품질을 유지하는 데 중요합니다.
위 내용은 객체 지향 프로그래밍에서 'eval()'을 사용하는 것이 위험한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!