我知道类名的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)
答案 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?