我正在编写一个需要跨引擎找出数据库模式的应用程序。为此,我正在使用 Python 编写一个小型数据库适配器。我决定首先编写一个概述我需要的功能的基类,然后使用从这个基类继承的类来实现它。在此过程中,我需要实现一些需要在所有这些类中都可以访问的常量。其中一些常量需要使用 C 风格的按位或组合。
我的问题是,
- 共享此类常量的标准方法是什么?
- 创建可组合常量的正确方法是什么?我指的是
MAP_FIXED | map 文件 | MAP_SHARED
C 允许的样式代码。
对于前者,我遇到了所有常量首先被放入模块的线程。对于后者,我简单地想到了使用 bool 字典。这两个都显得太笨拙了。我想这是一个相当普遍的要求,并且认为确实存在一些好的方法!
最佳答案
what is the standard way of sharing such constants?
在整个标准库中,最常见的方法是使用 UPPER_CASE_WITH_UNDERSCORES 名称将常量定义为模块级变量。
what is the right way to create constants that can be combined? I am referring to MAP_FIXED | MAP_FILE | MAP_SHARED style code that C allows.
适用与 C 中相同的规则。您必须确保每个常量值对应于一个唯一的位,即 2 的幂(2、4、8、16、...)。
大多数时候,人们为此使用十六进制数:
OPTION_A = 0x01
OPTION_B = 0x02
OPTION_C = 0x04
OPTION_D = 0x08
OPTION_E = 0x10
# ...
有些人更喜欢更易读的风格,使用移位运算符动态计算常量值:
OPTION_A = 1 << 0
OPTION_B = 1 << 1
OPTION_C = 1 << 2
# ...
在 Python 中,您还可以使用二进制表示法使这一点更加明显:
OPTION_A = 0b00000001
OPTION_B = 0b00000010
OPTION_C = 0b00000100
OPTION_D = 0b00001000
但由于这种表示法冗长且难以阅读,因此使用十六进制或二进制移位表示法可能更可取。
关于coding-style - 在 Python 中创建常量的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078731/