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

这个代码模式有什么意义?

  •  3
  • user49117  · 技术社区  · 15 年前

    我试图为tk扩展创建一个python包装器,所以我查看tkinter.py以了解如何进行。

    在查看该文件时,我发现下面的模式出现了很多次:定义了一个内部方法(由方法名称中的前导“uu”表示),然后定义了一个公共方法作为内部方法。

    我想知道这样做有什么好处。

    例如,在类misc的代码中:

    def _register(self, func, subst=None, needcleanup=1):
        # doc string and implementations is removed since it's not relevant
    register = _register
    

    谢谢您。

    3 回复  |  直到 15 年前
        1
  •  8
  •   Jason Baker    15 年前

    有时,您可能希望更改方法的行为。例如,我可以这样做(假设在misc类中):

    def _another_register(self, func, subst=None, needcleanup=1):
        ...
    
    def change_register(self):
        self.register = self._another_register
    
    def restore_register(self):
        self.register = self._register
    

    这是一种非常方便的方法,可以在不进行子类化的情况下改变某些代码段的行为(但通常不建议这样做,除了类本身)。

        2
  •  2
  •   Nick Dandoulakis    15 年前

    From PEP8

    此外,使用前导或尾随的下列特殊形式 可以识别下划线(这些下划线通常可以与任何情况组合在一起 公约):

    _单\前导\下划线:弱 “内部使用”指示器。例如“从 M import*“不导入对象 其名称以下划线开头。

        3
  •  1
  •   shylent    15 年前

    嗯,我想可能有 另一个 内部可调用,可能已经被使用了,但它没有达到您所拥有的版本。一般来说,我认为这是一个好主意——公开和在内部公开一个符号,它可以是任何东西,一个真正的方法,一个存根方法,一个方法的调试版本,任何东西。