【问题标题】:What would be considered the better naming style here?什么会被认为是更好的命名风格?
【发布时间】:2011-09-17 19:53:35
【问题描述】:

我正在为 Tkinter 编写一个扩展,但对于我要添加的一些新属性应该使用哪种命名风格存在冲突。

这是第一种命名风格,为所有新属性赋予前缀sw_

import Tkinter as tk

class New (tk.Button, object) :
    def __init__ (self, par) :
        tk.Button.__init__(self, par)

        attrnames = ['attr0', 'attr1', 'attr2', 'attr3']

        for name in attrnames :
            newname = 'sw_' + name
            setattr(self, newname, None)


root = tk.Tk()

new = New(root)
new.pack()

new.sw_attr0

root.mainloop()

对于第二种命名风格,我制作了SW 类的所有新属性属性。然后我创建了一个SW 的实例@我的新类的属性。

import Tkinter as tk

class SW (object) :
    def __init__ (self) :
        attrnames = ['attr0', 'attr1', 'attr2', 'attr3']

        for name in attrnames :
            setattr(self, name, None)

class New (tk.Button, object) :
    def __init__ (self, par) :
        tk.Button.__init__(self, par)

        self.sw = SW()


root = tk.Tk()

new = New(root)
new.pack()

new.sw.attr0

root.mainloop()

【问题讨论】:

  • 将属性命名为 attr0, attr1, attr2 有什么问题。包含 sw 的愿望背后是什么?做到这一点的最佳方法取决于您首先尝试这样做的原因。
  • 这个问题值得naming-conventions标签
  • Winston,我基本上是在尝试组织名称空间,以便用户可以轻松分辨 Tkinter 和扩展程序之间的区别。
  • 老实说,我认为您不想标记您的扩展程序和 Tkinter 之间的明显断开。从用户的角度来看,它是一个对象。谁编写代码并不重要。

标签: python class attributes namespaces naming-conventions


【解决方案1】:

Python's style guide 是要遵循的——做最易读、最明智的事情。也就是说,它确实建议您遵循任何项目样式而不是官方 Python 样式,但在做一些新的事情时使用 Python 样式。

Python 已经将名称间距作为语言的一项功能(带有导入),因此完全不需要前缀。

在你的情况下,使用前缀是不好的——这意味着你打破了 Python 的整个鸭式打字思想和面向对象的思想。您要求用户知道他们正在使用您的类添加的属性,而不是最初存在的属性,这不是他们关心的问题。让课堂发挥作用,避免额外的对他们来说不重要的东西。它只是一个对象。他们应该只使用它而不关心实现。

【讨论】:

    【解决方案2】:

    唯一的建议是使用信息量更大的类名,然后是 SW。在 CapCase 中使用完整的单词会更好,请参阅 pep 8

    【讨论】:

    • 我同意;然而,这只是一个例子。类名将更具描述性。
    【解决方案3】:

    我认为你不需要任何前缀。

    但是使用单独的对象会使使用您的代码的人感到困惑。所以我不得不说一个前缀比在混合中引入一个额外的对象更好。

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2012-12-15
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多