我正在为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()
答案 0 :(得分:3)
Python's style guide是要遵循的事情 - 做最可读,最明智的事情。也就是说,它确实建议您遵循官方Python样式的任何项目样式,但在做新事物时使用Python样式。
Python已经将名称间距作为语言的一个特征(使用导入),因此完全不需要前缀。
在你的情况下,使用前缀是不好的 - 这意味着你打破了Python的整个鸭子式的意识形态和面向对象的想法。您需要用户知道他们正在使用您的班级添加的属性,而不是原来的属性,这不是他们关心的问题。使课程有效,并避免额外的东西,这些东西对他们来说并不重要。这只是一个对象。他们应该在不关心实施的情况下使用它。
答案 1 :(得分:1)
唯一的建议是使用更多信息丰富的类名,然后使用SW。使用CapCase中的完整单词会更好,请参阅pep 8。
答案 2 :(得分:0)
我认为你不需要任何前缀。
但是使用单独的对象会使使用代码的人感到困惑。所以我不得不说前缀更好然后在混合中引入一个额外的对象。