5

我只是想知道,如何隐藏特殊

__.*__ 

python *中的方法?特别是我正在使用带有制表符完成功能的交互式 python 解释器,我只想显示我的模块公开的方法......

谢谢,

/我的/

*(至少来自使用 python shell 的用户)


现在看起来像这样:

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.
4

3 回答 3

3

我认为您应该寻找一种方法来让该特定环境/解释器在您按 TAB 时停止显示“私有”方法。我认为没有办法从 Python 本身“隐藏”方法,那会很奇怪。

于 2009-04-23T13:49:04.863 回答
3

好吧,您可以创建一个子类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

于 2009-04-23T17:06:45.220 回答
1

我会看看ipython。也许您可以在没有子进程的情况下将 ipythons 交互式 shell 挂接到您的应用程序中,并从那里应用私有方法过滤。

于 2009-04-23T15:21:24.957 回答