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.SOMEFLAG
和 bla.SOMEOTHERFLAG
必须是整数值才能起作用。
另一个选项是使用关键字参数:
bla.function(argument, SOMEFLAG = True, SOMEOTHERFLAG = True)
并像这样定义你的函数:
def function(arg, **flags):
在该函数中,flags
将是:
{'SOMEFLAG': True, 'SOMEOTHERFLAG': True}
一些 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.SOMEFLAG
和 bla.SOMEOTHERFLAG
必须是整数值才能起作用。
另一个选项是使用关键字参数:
bla.function(argument, SOMEFLAG = True, SOMEOTHERFLAG = True)
并像这样定义你的函数:
def function(arg, **flags):
在该函数中,flags
将是:
{'SOMEFLAG': True, 'SOMEOTHERFLAG': True}