Python样式:“名称空间”的小写类名?

时间:2010-12-07 18:06:47

标签: python coding-style

我知道类名的PEP-8约定是ClassName。但是我们经常使用小类作为伪命名空间,枚举等。换句话说,不是你要实例化的真正的类。我们选择了这种“类”的小写命名约定,因为它们实际上是命名空间/枚举名称。

是否有其他人拥有内部风格或其他方式来实现相同的目标?

一个例子:

import urllib2

class config:  # pseudo-namespace for module-level config variables
    api_url = 'http://example.com/api'
    timeout = 1.5
    debug = True

class countries:  # pseudo-enum
    new_zealand = 1
    united_states = 2

def func():
    if config.debug:
        print 'Calling func()'
    return urllib2.urlopen(config.api_url)

4 个答案:

答案 0 :(得分:5)

对于所有枚举和常量,我更喜欢使用大写版本。

class COUNTRIES:  # pseudo-enum
    NEW_ZEALAND = 1
    UNITED_STATES = 2

如果班级名称并非全部大写,我仍然可以。因为,任何方式都与枚举值绑定。我总是会像Countries.NEW_ZEALAND一样使用它,它告诉我它是一个枚举。

class Countries:  # pseudo-enum
    NEW_ZEALAND = 1
    UNITED_STATES = 2

答案 1 :(得分:4)

您还可以使用以下内容创建名为config的模块:

api_url = 'http://example.com/api'
timeout = 1.5
debug = True

答案 2 :(得分:2)

我改用词典:

config = dict(
    api_url = 'http://example.com/api',
    timeout = 1.5,
    debug = True)

countries = dict(
    new_zealand = 1,
    united_states = 2)

如果您在Python dict中发现属性访问繁琐,请尝试attrdict

class attrdict(dict):
    def __init__(self, *args, **kwargs):
        dict.__init__(self, *args, **kwargs)
        self.__dict__ = self

它允许使用作为属性的有效标识符的密钥来访问字典条目,例如, config.api_url代替config["api_url"]

当然,我使用小写名称。

答案 3 :(得分:1)

为什么不

class PseudoNamespace: pass

config = PseudoNamespace()
config.api_url = 'http://example.com/api'
config.timeout = 1.5
config.debug = True

countries = PseudoNamespace()
config.new_zealand = 1
config.united_states = 2

如果你真的关心PEP?