나는 야후 날씨 정보를 가져 와서 Twitter에 게시하는 멋진 작은 응용 프로그램을 작성했습니다. 완벽하게 작동 했으므로 코드를 다른 이름의 파일로 다시 배열하여 더 이해하기 쉽도록했습니다. 그리고 그 때 제가 어떤 문제를 겪었습니다.인스턴스를 함수 인수로 전달
이전에 libtweather.py
에 Class
이있었습니다. 내 account
입니다. 그것은 내가 accountName.parseFeed()
을 할 수있게 해 주었고 나는 야후의 파서드 결과물을 출력으로 받았다. 이 같은 Class
의 인스턴스를 생성이 내 메인 스크립트에서 액세스 한
(__ini__
은 날씨 URL, 트위터 사용자 이름과 인수로 암호를했다) : 그것은 모든 계정 이름의 목록을 유지 exec '%s = lw.twitterWeather("%s", "%s", "%s")' % (item[0], item[1], item[2], item[3])
다른 함수에 인수로 전달 된 목록. 인스턴스가 없기 때문에
def getWeather(accountList): #account names passed as a list of strings
for item in accountList:
print item, ': ',
item = eval(item)
print item.parseFeed(), '\n
내가 Class
과 같은 파일로 getWeather
기능을 이동하는 지금 결정했지만 라인 item = eval(item)
의 나에게 문제를 제공합니다 :
또 다른 기능 getWeather
수행하여 날씨를 가지고 해당 파일에 생성됩니다. 그들 모두는 주요 스크립트에 있습니다.
이제 내 질문 : 그 인스턴스를 함수의 인수로 제공 할 수있는 방법이 있습니까? 또는 함수를 Class
에 넣어야합니까? 비록 내가 그랬더라도, 나는 아직도 item = eval(item)
을 필요로 할 것이므로, 목록에있는 여러 항목에 대해 item.parseFeed()
을해야 할 필요가있다.
미리 감사드립니다. 내 애플 리케이션은 여기에 전체 게시물을 조금 있지만, 더 잘 이해할 필요가 있다면 더 많은 코드를 게시 할 것이다.
업데이트 : 내 libtweather.py
을 가져 와서 인스턴스를 만들었습니다. 그 안에있는 함수가 액세스 할 수 있도록 스크립트의 맨 아래에 코드를 생성하는 인스턴스가 추가되었습니다. 나는 더 나은 방법이있을 것이라고 확신하지만 현재 나에게 도움이된다.
클래스의 인스턴스를 만들기 위해'exec'를 사용하게 된 특별한 이유가 있습니까? –
아무 것도 없습니다. 그것이 내가 구글에서 만난 첫 번째 방법이었습니다. globals(), vars() 또는 locals() 중 하나를 사용할 수 있다는 것을 알고 있습니다. 나는 지금 내가 사용하려고하는 것을보기 위해 그들을보고있다. – avacariu
'eval'이나'exec'을 사용해야 할 필요가있는 경우, 그렇게하지 마십시오. 대신 다른 것을하십시오. 절대 사용하지 마십시오. 물론 당신이 필요로하지 않는 한, 그들이 거기에있는 이유입니다. 그러나 당신이 그 사람들을 __need__한다는 것을 알기도 전에, 당신이 원하는 것을 할 수있는 다른 좋은 방법 __이 있음을 알아야합니다. 이것은 거의 사실이 아닙니다. – aaronasterling