如何在Python中隐藏__方法__?

5 投票
3 回答
1289 浏览
提问于 2025-04-15 11:13

我只是想知道,如何在Python中隐藏特殊的

__.*__ 

方法呢?特别是我在使用一个带有自动补全功能的交互式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 个回答

1

我建议你看看ipython。也许你可以把ipython的交互式命令行直接连接到你的应用里,这样就能在里面使用私有方法的过滤功能。

3

我觉得你应该找个办法,让那个特定的环境或解释器在你按下TAB键时不显示“私有”方法。我认为在Python里没有办法“隐藏”方法,这样做会很奇怪。

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

撰写回答