Python 在这里,什么是更好的命名方式?
我正在为Tkinter编写一个扩展,在我将要添加的一些新属性中,我应该使用哪种命名风格存在冲突 这是第一种命名样式,为所有新属性赋予前缀Python 在这里,什么是更好的命名方式?,python,class,attributes,namespaces,naming-conventions,Python,Class,Attributes,Namespaces,Naming Conventions,我正在为Tkinter编写一个扩展,在我将要添加的一些新属性中,我应该使用哪种命名风格存在冲突 这是第一种命名样式,为所有新属性赋予前缀sw\uu import Tkinter as tk class New (tk.Button, object) : def __init__ (self, par) : tk.Button.__init__(self, par) attrnames = ['attr0', 'attr1', 'attr2', 'att
sw\uu
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()
唯一的建议是使用信息量更大的类名,然后是SW。在CapCase中使用完整的单词要好得多,请参见。唯一的建议是使用信息量更大的类名,然后是SW。在CapCase中使用完整单词更好,请参见。我认为您不需要任何前缀
但是使用单独的对象会使使用您的代码的人感到困惑。所以我不得不说,前缀比在混合中引入额外对象更好。我认为您不需要任何前缀 但是使用单独的对象会使使用您的代码的人感到困惑。所以我不得不说,前缀比在混合中引入额外的对象更好。是接下来要做的事情——做最可读、最明智的事情。也就是说,它确实建议您遵循任何项目样式而不是官方的Python样式,但是在做新的事情时使用Python样式 Python已经将名称间隔作为语言的一项功能(使用导入),因此完全不需要前缀 在您的情况下,使用前缀是不好的-这意味着您打破了Python的整个duck类型思想和面向对象的思想。您需要用户知道他们使用的是您的类添加的属性,而不是最初添加的属性,这与他们无关。让课堂发挥作用,避免让学生知道不重要的额外内容。它只是一个物体。他们应该直接使用它,而不必关心它的实现。是接下来要做的事情——做最可读、最明智的事情。也就是说,它确实建议您遵循任何项目样式而不是官方的Python样式,但是在做新的事情时使用Python样式 Python已经将名称间隔作为语言的一项功能(使用导入),因此完全不需要前缀
在您的情况下,使用前缀是不好的-这意味着您打破了Python的整个duck类型思想和面向对象的思想。您需要用户知道他们使用的是您的类添加的属性,而不是最初添加的属性,这与他们无关。让课堂发挥作用,避免让学生知道不重要的额外内容。它只是一个物体。他们应该只使用它而不关心实现。命名属性有什么问题
attr0、attr1、attr2
。想要加入软件的背后是什么?最好的方法取决于你为什么首先尝试这个问题。这个问题需要一个命名约定
tagWinston,我基本上是在尝试组织名称空间,这样用户就可以很容易地区分Tkinter和扩展。老实说,我认为你不想在你的分机和Tkinter之间留下明显的分离。从用户的角度来看,它是一个完整的对象。谁编写的代码并不重要。命名属性有什么问题吗attr0、attr1、attr2
。想要加入软件的背后是什么?最好的方法取决于你为什么首先尝试这个问题。这个问题需要一个命名约定
tagWinston,我基本上是在尝试组织名称空间,这样用户就可以很容易地区分Tkinter和扩展。老实说,我认为你不想在你的分机和Tkinter之间留下明显的分离。从用户的角度来看,它是一个完整的对象。谁写的代码并不重要,我同意;然而,这只是一个例子。类名将更具描述性。我同意;然而,这只是一个例子。类名将更具描述性。