代码之家  ›  专栏  ›  技术社区  ›  miku

如何在python中隐藏方法?

  •  5
  • miku  · 技术社区  · 15 年前

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

    __.*__ 
    

    python*中的方法?尤其是我正在使用一个带有制表符完成的交互式Python解释器,我只想显示我的模块公开的方法…

    谢谢,

    Myyn/

    *(至少来自使用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.
    
    3 回复  |  直到 11 年前
        1
  •  3
  •   theller    15 年前

    你可以创建一个 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

        2
  •  3
  •   unwind    15 年前

    我认为您应该寻找一种方法让特定的环境/解释器在您按下tab键时停止显示“private”方法。我认为没有一种方法可以“隐藏”Python本身的方法,这将是非常奇怪的。

        3
  •  1
  •   optixx    15 年前

    我要去看看伊普敦。也许你可以在没有子进程的情况下将ipythons交互shell挂接到你的应用程序中,并从那里应用私有方法过滤。