2017-10-20 18 views
0

방금 ​​처음으로 메타 클래스를 사용했습니다. 목적은 클래스 나 인스턴스에 대한 help() 출력을 제어하는 ​​것이 었습니다. 메타 클래스의 __dir __() 함수에서 속성을 지정하면 도움말 내용을 제어 할 수있었습니다. 그러나 Intellisense/code_completion의 경우 Jupyter에서 클래스 자체의 __dir __() 함수가 중요하다는 것을 알았습니다.클래스 및 메타 클래스에서 __dir __()

사실을 이해하는 것으로 충분합니다. 그러나 그 이유를 알고 싶습니다.

설명해 주셔서 감사합니다.

+0

도움말 콘텐츠? __dir__은'dir()'의 구현이며 객체의 속성 dict를 출력해야합니다 – Vinny

+0

예, Jupyter의 help()는 \ __ dir __()을 사용하여 도움말 내용을 결정하는 것처럼 보입니다. 이것이 Jupyter에만 해당되는지 또는이 행동에 대해 더 일반적인 이유가 있는지는 알 수 없습니다. 그럼에도 불구하고 왜 클래스와 메타 클래스의 \ __ dir __()을 사용해야합니까? –

답변

0

other answer about this topic에 언급했듯이 파이썬은 help의 내용을 선택하는 방법을 정의하지 않습니다. 그리고 metaclass__dir__을 사용하면 언어의 특성상 작동하지만 제 3 자 모듈은 일반적인 결과가 아니므로 클래스의 디렉토리와는 다른 사용자 정의 결과를 반환하지 않을 것입니다.

그래서 사용자 정의 할 수없는 기능을 사용자 정의하려고합니다. 사용자는 모든 불필요한 사용자 메소드로 프록시하는 새 클래스를 만들어야하므로 도움말 및 지시에서 숨길 수 있습니다. Jupiter 노트북을 사용하는 대신 특정 지시 사항과 지시 사항 만 표시하는 대신 필요한 것을 수행하는 전체 응용 프로그램을 제작하거나 보여주고 싶습니다.

전반적으로 다른 동기를 위해 메타 클래스를 사용하고 있지만, 단지 help 출력을 무시하려고 메타 클래스를 사용하는 중이라면 잘못된 사용이라고 이미 말할 수 있습니다.

다른 옵션은 원하는 출력 만 인쇄하는 클래스에서 수동으로 호출 할 수있는 "help2"메서드를 사용하는 것입니다. 그런 다음 메인 클래스 docstring에 "사용법을 배우려면 classname.help2()을 사용하십시오."라고 명시하고, 그렇지 않으면 __dir__ 만 남겨 두십시오.

+0

이 설명에 감사드립니다. 코드를 문서화하고 싶을 때가 처음입니다! 내가 docstring의 아이디어를 좋아하지만, 나는 그들을 사용하면 조금 실망입니다. 나의 목표는 쓸모없는 많은 것들과 나의 재료를 섞는 것을 피하는 것이었다. –

+0

나는 또한 당신이 스핑크스를 살펴보고, 올바른 형식의 docstring을 활용하여 모든 프로젝트에 대한 firstclass 오프라인 (즉, "도움이되지 않는다") 문서를 생성하는 방법에 대해 언급했다. 너 정말로 거기에 가야 해. https://thomas-cokelaer.info/tutorials/sphinx/docstring_python.html – jsbueno