【发布时间】:2021-05-09 00:19:51
【问题描述】:
给定一个无法修改的 Enum 对象,以及一个自定义的 Query 类,该类应该在给定不同参数的情况下生成 Enum 值的编译:
from enum import Enum
class Fields(Enum):
a = ["hello", "world"]
b = ["foo", "bar", "sheep"]
c = ["what", "the"]
d = ["vrai", "ment", "cest", "vrai"]
e = ["foofoo"]
class Query:
def __init__(self, a=True, b=True, c=False, d=False, e=False):
self.query_fields = set()
self.query_fields.update(Fields.a.value) if a else None
self.query_fields.update(Fields.b.value) if b else None
self.query_fields.update(Fields.c.value) if c else None
self.query_fields.update(Fields.d.value) if d else None
self.query_fields.update(Fields.e.value) if e else None
可以获得一组自定义的query_fields,例如:
[出]:
>>> x = Query()
>>> x.query_fields
{'bar', 'foo', 'hello', 'sheep', 'world'}
>>> x = Query(e=True)
>>> x.query_fields
{'bar', 'foo', 'foofoo', 'hello', 'sheep', 'world'}
问题:在 Query 初始化函数中,我们必须遍历每个类参数并执行类似 self.query_fields.update(Fields.a.value) if a else None 的操作,还有其他方法可以实现相同的行为和输出的Query().query_fields 没有对每个参数进行硬编码?
【问题讨论】:
-
看看是否有其他方法可以在不使用 *args 的情况下获得效果。否则,赏金将归于 Ethan
-
Query.__init__中的每个成员姓名是否都在场?换句话说,Query只能与Fields一起使用? -
Query 的 init 不仅应该适用于 Fields 类型,还应该能够采用其他类型。例如。也许有一个 str 类型的
f变量。 -
我不明白你最后的评论——你能在你的问题中添加一个例子吗?
标签: python class object enums set