반응형
내 노래의 데이터를 쉽게 저장하기 위해 다음 클래스를 사용하고 있습니다.
class Song:
"""The class to store the details of each 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()
이것이 if / else
블록을 작성하는 것보다 훨씬 더 확장 가능하다고 생각합니다. 그러나 eval
은 나쁜 습관으로 간주되어 사용하기에 안전하지 않은 것 같습니다. 그렇다면 누구든지 이유를 설명하고 위의 클래스를 더 잘 정의하는 방법을 보여줄 수 있습니까?
해결 방법
예, eval을 사용하는 것은 나쁜 습관입니다. 몇 가지 이유를 들자면 :
class Song:
"""The class to store the details of each 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)
수정 :
eval 또는 exec를 사용해야하는 경우가 있습니다. 그러나 그들은 드뭅니다. 귀하의 경우에 eval을 사용하는 것은 확실히 나쁜 습관입니다. eval과 exec가 잘못된 장소에서 자주 사용되기 때문에 나쁜 습관을 강조하고 있습니다.
수정 2 :
OP 케이스에서 eval이 '매우 위험하고 안전하지 않다'는 의견에 동의하지 않는 것 같습니다. 이 특정 경우에는 사실 일 수 있지만 일반적으로는 그렇지 않습니다. 질문은 일반적이었고 내가 나열한 이유는 일반적인 경우에도 사실입니다.
수정 3 : 재주문 된 포인트 1 및 4
참조 페이지 https://stackoverflow.com/questions/1832940
반응형
'파이썬' 카테고리의 다른 글
파이썬 Pandas 시리즈에서 요소의 색인 찾기 (0) | 2021.01.08 |
---|---|
파이썬 Set 객체에서 요소의 인덱스를 얻는 방법 (0) | 2021.01.08 |
파이썬 Python3에서 한 줄의 입력에서 정수 배열을 읽는 방법 (0) | 2021.01.08 |
파이썬 json.dumps의 utf-8 텍스트를 \ u 이스케이프 시퀀스가 아닌 UTF8로 저장 (0) | 2021.01.08 |
파이썬 .DAT 파일을 파이썬으로 읽습니까? (0) | 2021.01.08 |
댓글