Python 为自己创建的标志创建 class

Python creation of flags, for self created class

一些 Python 标准库使用这样的标志:

re.match(pattern, str, re.MULTILINE | re.IGNORECASE)

我想知道,如果您自己创建一个 class,如何实现它。 我在网上搜索了一下,发现: Python: passing flags to functions 这个问题对我来说并不令人满意,因为它只显示了说

的方法
bla.function(argument, flag1=0, flag3=1)

但我真的很想要它

bla.function(argument, bla.SOMEFLAG | bla.SOMEOTHERFLAG)

这可能吗?

此外,是否可以创建这些标志,而不让它们引用实际值?所以您真的在代码中要求 bla.SOMEFLAG 而不是由标志表示的 int?一个示例用法是:

mask_list = [
    [             15,           "foo",           "bar"],
    [bla.TRANSPARENT,           "egg",            14.3],
    [        (4,7,2), {"name":"john"}, bla.TRANSPARENT]
]

其中 mask_list 表示掩码(包含任何元素),稍后可以通过函数将其与另一个列表进行比较,设置 bla.TRANSPARENT 标志的所有索引都会被比较忽略.

如果有人可以将 link 传给我一个文件,在其中对此进行了解释,或者可以提出一个简单的解释,我将不胜感激。 (我正在使用 Python3)

提前致谢!

没有什么能阻止你这样做:

bla.function(argument, bla.SOMEFLAG | bla.SOMEOTHERFLAG)

如果您的函数签名是

def function(arg, flags):

但是 | 是一个按位运算符,因此它意味着它的操作数是整数,或者类似整数。因此 bla.SOMEFLAGbla.SOMEOTHERFLAG 必须是整数值才能起作用。

另一个选项是使用关键字参数:

bla.function(argument, SOMEFLAG = True, SOMEOTHERFLAG = True)

并像这样定义你的函数:

def function(arg, **flags):

在该函数中,flags 将是:

{'SOMEFLAG': True, 'SOMEOTHERFLAG': True}