Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在这里,什么是更好的命名方式?_Python_Class_Attributes_Namespaces_Naming Conventions - Fatal编程技术网

Python 在这里,什么是更好的命名方式?

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

我正在为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', '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之间留下明显的分离。从用户的角度来看,它是一个完整的对象。谁写的代码并不重要,我同意;然而,这只是一个例子。类名将更具描述性。我同意;然而,这只是一个例子。类名将更具描述性。