什么被认为是更好的命名风格?

时间:2011-09-17 19:53:35

标签: python class attributes namespaces naming-conventions

我正在为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()

3 个答案:

答案 0 :(得分:3)

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

Python已经将名称间距作为语言的一个特征(使用导入),因此完全不需要前缀。

在你的情况下,使用前缀是不好的 - 这意味着你打破了Python的整个鸭子式的意识形态和面向对象的想法。您需要用户知道他们正在使用您的班级添加的属性,而不是原来的属性,这不是他们关心的问题。使课程有效,并避免额外的东西,这些东西对他们来说并不重要。这只是一个对象。他们应该在不关心实施的情况下使用它。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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