2015-01-02 4 views
0

버전파이썬 : 모듈 간의 인수로 함수 이름을 전달

파이 게임 1.9.2와

파이썬 3.4

질문

어떻게 함수/메소드의 이름을 전달할 수 있습니다 이 함수가 존재하지 않는 한 모듈에서 문자열을 만들고 eval()로 평가하지 않고도 그 모듈을 포함하는 모듈로?

배경 나는 교육 목적에 대한 간단한 MVC 패턴을 가지고있다. 단순함을 위해 메뉴에서 버튼을 눌렀다 고 가정 해 봅시다. 여기에 일어나는 내용은 다음과 같습니다

컨트롤러는 우리의 경우, 현재 실행중인 로직, 메뉴 (위치, 마우스 버튼과 버튼을 누르거나 놓은 경우를 포함) ClickEvent로 클릭을 보냅니다. 메뉴는 위치에 따라 클릭을 평가하고 버튼에서 발생한 경우 모델의 메서드 이름을 포함하는 ModelEvent를 반환합니다. 모델은 상기 ModelEvent를 수신하여 평가한다. 눈에 보이는 변경 사항이 발생하면 새로운 ViewEvent가 생성됩니다 (내 질문을 뛰어 넘음).

는 ((모든 나의 요구에 맞게 보이거나 내가 끔찍하게 그것을 오해하지 않는) 평가와 문자열을 사용하여 두 번 내가 한 번 람다에 의해, 지금까지 세 가지 방법으로 문제를 접근

접근). 후자의 접근 방식의 단점은 명백합니다. 함수의 이름은 인스턴스 사이를 문자열로 전달한 다음 시간이 걸리는 eval()로 평가해야합니다.

문자열과 eval()을 사용하지 않고도 한 모듈에서 다른 모듈로 메소드와 함수의 이름을 다른 모듈로 전달할 수있는 효과적인 방법은 무엇입니까? 당신이 내 일반적인 접근에있는 중대한 실수를 참조하면

또는, 나는 아직도 배우고 그것을 듣고 기꺼이 것입니다. 내가 제대로 이해하면

+0

그냥 함수 자체를 전달할 수 없습니까? – shuttle87

+0

아니면 ** 함수의 ** 이름을 전달 주장하는 이유는 무엇입니까 단지 https://docs.python.org/3.4/library/functions.html#getattr – Ngenator

+1

를 사용! 그냥 함수 (또는 바운드 메서드) 자체를 전달하십시오! 그런 다음 수신자는 전화를 걸 수 있습니다. 콜백 패턴 및 관용구에 대한 자세한 내용은 예 : https://www.youtube.com/watch?v=XpW-sRVKoao를 참조하십시오. –

답변

0

, 당신은이 문제가 그렇게 문제가 있습니다 Events.Perhaps와 콜백을 혼합한다. 파이썬 함수에서

개체이며, 문자열 등 다른 개체로 전달 될 수있다. 따라서 이름을 전달하고 평가할 필요가 없습니다.

+0

나는 지금 엄청나게 어리 석다. 나는 (객체와 같은 함수를 사용하여) 이전에 해왔지만, MVC 패턴에 대한 몇 달 간의 작업에서 결코 그런 식으로는 생각하지 않았다. 그것이 영어로 부르는 이유는 모르겠지만 숲이 더 이상 보이지 않는 나무가 너무 많다는 말을 듣고 있습니다 ...이 부분에 약간의 빛을 비춰 주셔서 대단히 감사합니다! –

관련 문제