파이썬 3.4
질문
어떻게 함수/메소드의 이름을 전달할 수 있습니다 이 함수가 존재하지 않는 한 모듈에서 문자열을 만들고 eval()로 평가하지 않고도 그 모듈을 포함하는 모듈로?
배경 나는 교육 목적에 대한 간단한 MVC 패턴을 가지고있다. 단순함을 위해 메뉴에서 버튼을 눌렀다 고 가정 해 봅시다. 여기에 일어나는 내용은 다음과 같습니다
컨트롤러는 우리의 경우, 현재 실행중인 로직, 메뉴 (위치, 마우스 버튼과 버튼을 누르거나 놓은 경우를 포함) ClickEvent로 클릭을 보냅니다. 메뉴는 위치에 따라 클릭을 평가하고 버튼에서 발생한 경우 모델의 메서드 이름을 포함하는 ModelEvent를 반환합니다. 모델은 상기 ModelEvent를 수신하여 평가한다. 눈에 보이는 변경 사항이 발생하면 새로운 ViewEvent가 생성됩니다 (내 질문을 뛰어 넘음).
는 ((모든 나의 요구에 맞게 보이거나 내가 끔찍하게 그것을 오해하지 않는) 평가와 문자열을 사용하여 두 번 내가 한 번 람다에 의해, 지금까지 세 가지 방법으로 문제를 접근
접근). 후자의 접근 방식의 단점은 명백합니다. 함수의 이름은 인스턴스 사이를 문자열로 전달한 다음 시간이 걸리는 eval()로 평가해야합니다.
문자열과 eval()을 사용하지 않고도 한 모듈에서 다른 모듈로 메소드와 함수의 이름을 다른 모듈로 전달할 수있는 효과적인 방법은 무엇입니까? 당신이 내 일반적인 접근에있는 중대한 실수를 참조하면
또는, 나는 아직도 배우고 그것을 듣고 기꺼이 것입니다. 내가 제대로 이해하면
그냥 함수 자체를 전달할 수 없습니까? – shuttle87
아니면 ** 함수의 ** 이름을 전달 주장하는 이유는 무엇입니까 단지 https://docs.python.org/3.4/library/functions.html#getattr – Ngenator
를 사용! 그냥 함수 (또는 바운드 메서드) 자체를 전달하십시오! 그런 다음 수신자는 전화를 걸 수 있습니다. 콜백 패턴 및 관용구에 대한 자세한 내용은 예 : https://www.youtube.com/watch?v=XpW-sRVKoao를 참조하십시오. –