Python 通用常量变量的最佳实践

Python 通用常量变量的最佳实践,python,global-variables,Python,Global Variables,我有一个模块,有大约40个函数,它们都将user作为关键字参数 user在其中任何一项中都不会更改-声明后保持不变 在函数之外声明user而不传递它,而是引用全局变量user,这是否不符合语法?在不了解更多用例的情况下很难确定,但这听起来像是一个类的工作: class ComeUpWithAGoodName(object): def __init__(self, user): self.user = user def function1(self):

我有一个模块,有大约40个函数,它们都将
user
作为关键字参数

user
在其中任何一项中都不会更改-声明后保持不变


在函数之外声明
user
而不传递它,而是引用全局变量
user
,这是否不符合语法?

在不了解更多用例的情况下很难确定,但这听起来像是一个类的工作:

class ComeUpWithAGoodName(object):
    def __init__(self, user):
        self.user = user
    def function1(self):
        do_stuff_with(self.user)
    # etc.

在不了解更多用例的情况下很难确定,但这听起来像是一个类的工作:

class ComeUpWithAGoodName(object):
    def __init__(self, user):
        self.user = user
    def function1(self):
        do_stuff_with(self.user)
    # etc.

也许是单身汉/博格什么的…@septi:我看不出有什么好的理由让它成为单身汉。除非有充分的理由阻止人们为多个用户创建多个实例,否则为什么要阻止它呢?但是当然,如果不了解OP的设计意图,就很难知道…@septi对于一个实例来说,它的内存效率不会更高,对象的数量完全相同。事实上,通常需要至少一个额外的变量和一些额外的代码来强制执行singleton/borg。对于多个对象,断言毫无意义,因为如果强制执行只有一个对象,则不能有多个对象。真的,这完全没有意义。@delnan:我不会说“绝对没有意义”,只是“通常没有意义”。有一些罕见的情况下,单例是有意义的…只是没有从Java来到Python的人想象的那么多。也许是单例/borg什么的…@septi:我看不出有什么好的理由让它成为单例。除非有充分的理由阻止人们为多个用户创建多个实例,否则为什么要阻止它呢?但是当然,如果不了解OP的设计意图,就很难知道…@septi对于一个实例来说,它的内存效率不会更高,对象的数量完全相同。事实上,通常需要至少一个额外的变量和一些额外的代码来强制执行singleton/borg。对于多个对象,断言毫无意义,因为如果强制执行只有一个对象,则不能有多个对象。真的,这完全没有意义。@delnan:我不会说“绝对没有意义”,只是“通常没有意义”。有一些罕见的情况下,单例是有意义的……只是没有从Java来到Python的人所认为的那么多。这种设计在某些情况下是合理的,例如,对于“配置”类型的变量,它改变了模块中函数的工作方式,但通常是这些情况之外的代码味道。您正在有效地将模块用作类实例,那么为什么不只使用真实的类实例呢?这种设计在某些情况下是合理的,例如,对于“配置”类型的变量,它会改变模块中函数的工作方式,但通常是在这些情况之外的代码味道。您正在有效地将模块用作类实例,那么为什么不使用真正的类实例呢?