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

时间:2009-07-12 19:21:21

标签: python

我正在尝试为tk扩展创建一个python包装器,所以我查看了Tkinter.py以了解如何执行此操作。

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

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

例如,在Misc类的代码中:

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

谢谢。

3 个答案:

答案 0 :(得分:8)

有时,您可能想要更改方法的行为。例如,我可以这样做(假设在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

这可以是一种非常方便的方法来改变某些代码片段的行为而无需子类化(但除了类本身之外,通常不建议这样做)。

答案 1 :(得分:2)

From PEP8

此外,以下特殊形式使用前导或尾随     下划线被认可(这些通常可以与任何情况相结合     约定):

  

_single_leading_underscore:弱   “内部使用”指标。例如。 “从   M import *“不导入对象   其名称以下划线开头。

答案 2 :(得分:1)

好吧,我想,可能有另一个内部可调用,可能已被使用,它只是没有使它到你的版本。一般来说,我认为这是一个好主意 - 你公开和公开地公开一个符号,它可以是任何东西,一个真正的方法,一个存根方法,一个方法的调试版本,任何东西。