Как скрыть __methods__ в python? - PullRequest
       14

Как скрыть __methods__ в python?

5 голосов
/ 23 апреля 2009

Мне просто интересно, как спрятать спец

__.*__ 

методы в питоне *? Особенно я использую интерактивный интерпретатор Python с завершением табуляции, и я хотел бы отображать только методы, которые мои модули предоставляют ...

спасибо,

/ myyn /

* (по крайней мере, от пользователя, который использует оболочку Python)


теперь это выглядит так:

h[2] >>> Q.
Q.ALL(                       Q.__delattr__(               Q.__getattribute__(                
Q.__package__                Q.__sizeof__(                Q.find_values(                         
Q.json
Q.DEFAULT_CONDITION(         Q.__dict__                   Q.__hash__(                  
Q.__reduce__(                Q.__str__(                   Q.get_loops_total_platform(  
Q.jsonlib
Q.SUCCESSFUL(                Q.__doc__                    Q.__init__(                  
Q.__reduce_ex__(             Q.__subclasshook__(          Q.get_platforms(             
Q.memoize(
Q.__all__                    Q.__file__                   Q.__name__                     
Q.__repr__(                  Q.cached_open(               Q.get_snippets(              
Q.__class__(                 Q.__format__(                Q.__new__(                      
Q.__setattr__(               Q.find_results(              Q.get_subjects(              
h[2] >>> Q.

и мне бы хотелось, чтобы это выглядело так:

h[2] >>> Q.
Q.ALL(                       Q.find_values(               Q.json
Q.DEFAULT_CONDITION(         Q.get_loops_total_platform(  
Q.jsonlib                    Q.SUCCESSFUL(                Q.get_platforms(             
Q.memoize(                   Q.cached_open(               Q.get_snippets(              
Q.find_results(              Q.get_subjects(              
h[2] >>> Q.

Ответы [ 3 ]

3 голосов
/ 23 апреля 2009

Ну, вы можете создать подкласс rlcompleter.Completer, переопределить эти методы и установите их в readline.

import rlcompleter
import readline
class MyCompleter(rlcompleter.Completer):
    def global_matches(self, text):
        ....
    def attr_matches(self, text):
        ....

import readline
readline.set_completer(MyCompleter().complete) 

Эти фрагменты кода позволяют вводить символы без учета регистра:

http://www.nabble.com/Re%3A-Tab-completion-question-p22905952.html

3 голосов
/ 23 апреля 2009

Я думаю, вам следует искать способ заставить эту конкретную среду / интерпретатор перестать отображать «приватные» методы при нажатии клавиши TAB. Я не думаю, что есть способ «спрятать» методы от самого Python, это было бы очень странно.

1 голос
/ 23 апреля 2009

Я бы заглянул в ipython. Возможно, вы сможете подключить интерактивную оболочку ipythons без подпроцесса к вашему приложению и применить оттуда фильтрацию закрытых методов.

...