【问题标题】:When a variable should be set as a private class variable (e.g. _var) vs a class constant (e.g. VAR) vs a private class constant (e.g. _VAR)?何时应将变量设置为私有类变量(例如_var)与类常量(例如VAR)与私有类常量(例如_VAR)?
【发布时间】:2017-04-10 05:01:38
【问题描述】:

我发现自己不确定是否应该将我在类中使用的某些变量设置为私有类变量(例如 _var)vs 类常量变量(例如 VAR)vs 私有类常量变量,如果这样的话使用(例如_VAR)。我意识到除了约定之外,这在 Python 中并不重要,但我想知道哪种方式是正确的(或更正确的)。

例如,假设我有一个用于存储高度的正则表达式模式的变量。假设我无意在类中的任何地方或代码的其他地方修改它,实际上我只在其中一个类方法中使用它,我应该这样做:

选项 1 - 设置为私有类变量:

_height_pattern = r"""(#'##?"?)|#'"""

选项2 - 设置为常量类变量

HEIGHT_PATTERN = r"""(#'##?"?)|#'"""

选项 3 - 设置为常量私有类变量(不确定是否存在这样的东西,或者我是否曾经看到过在此中声明的变量)

_HEIGHT_PATTERN = r"""(#'##?"?)|#'"""

或者也许是我没有想到的其他选择。请注意,在这种情况下,我选择了一个变量,我认为人们能够以一种或另一种方式提出一个很好的案例。但是,还有其他情况我觉得它会更加模糊。例如,如果我有一个随机种子变量(_SEED=2000?),其更改不会对功能产生根本影响?因此,如果您能分享一些易于遵循的经验法则,我们也将不胜感激。

【问题讨论】:

    标签: python coding-style


    【解决方案1】:

    实际上我只在其中一种类方法中使用它

    那么毫无疑问,这根本不应该是一个类变量。我会在方法中将它声明为常量。

    但是,我知道您的问题比您给出的这个例子要广泛一些,所以让我们假设您所说的这个变量将用于不止一种方法。在这种情况下,由于我也从未见过类似选项 3 的东西(而且它很丑),所以您应该使用选项 2,因为更重要的是您的代码说这个变量是 not进行修改,而不是告诉它不应在其类之外访问。

    【讨论】:

    • 如果变量需要一点时间来计算怎么办 - 例如依赖于 str.maketrans,虽然它只用于 1 个类方法,但该类方法被重复调用多次(它应用于大数据集中的每一行),然后我是否应该坚持将其作为类变量来节省累积的处理时间?
    • 不确定str.maketrans 是否是一个很好的例子,因为将maketrans 应用于脚本初始化的值可能不是一个好主意,因为它的返回可能在每次调用时有所不同(否则它使用它而不是使用我认为的最终值是没有意义的)。不过,如果是这样的话,我会说我的答案的最后一段适用。
    【解决方案2】:

    根据pep-0008,常量应全部大写,并在需要时使用下划线。示例HEIGHT_PATTERN

    作为更一般的注释,python 的编码“样式”可以在 pep 8 中找到(参见上面的链接)

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2014-12-27
      • 2013-03-24
      • 2014-09-21
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      相关资源
      最近更新 更多