Python创建的标志,用于自己创建的类

时间:2017-07-20 15:31:47

标签: python parameter-passing mask flags

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

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

我想知道,如果你自己创建一个类,如何实现它。 我搜索了互联网,发现: 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标志的索引都会被比较忽略。

如果有人可以通过我链接到文件,解释这个,或者可以提出一个简单的解释,我将非常感激。 (我使用的是Python3)

提前致谢!

1 个答案:

答案 0 :(得分:0)

没有什么可以阻止你这样做:

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}