gpt4 book ai didi

python - 获取某个属性具有特定值的类实例

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:34 25 4
gpt4 key购买 nike

我确定有一个术语可以表达我正在寻找的东西,或者如果没有,那么我尝试做的事情实际上是愚蠢的,这是有充分理由的。

但无论如何。我想知道是否有一种(准)内置方​​法来查找属性设置为特定值的特定类实例。

一个例子:

class Klass(object):
def __init__(self, value):
self.value = value
def square_value(self):
return self.value * self.value

>>> a = Klass(1)
>>> b = Klass(2)
>>> instance = find_instance([a, b], value=1)
>>> instance.square_value()
1
>>> instance = find_instance([a, b], value=2)
>>> instance.square_value()
4

我知道我可以编写一个循环遍历所有 Klass 实例的函数,并返回具有请求值的实例。另一方面,这个功能感觉好像它应该已经存在于 Python 中,如果不是,那一定有很好的理由说明它不存在。换句话说,我在这里尝试做的事情可以用更好的方式完成。

(当然,我不是在寻找一种方法来计算一个值的平方。以上只是我正在尝试寻找的构造的一个示例)。

最佳答案

使用过滤器:

filter(lambda obj: obj.value == 1, [a, b])

过滤器将返回符合您指定要求的对象列表。文档:http://docs.python.org/library/functions.html#filter

基本上,filter(fn, list) 遍历 list,并将 fn 应用于每个项目。它收集 fn 返回 true 的所有项目,然后放入列表中并返回它们。

注意:过滤器将始终返回一个列表,即使只有一个对象匹配。因此,如果您只想返回匹配的 第一个 实例,则必须执行以下操作:

def find_instance(fn, objs):
all_matches = filter(fn, objs)
if len(all_matches) == 0:
return False # no matches
else:
return all_matches[0]

或者,更好的是,

def find_instance(fn, objs):
all_matches = filter(fn, objs)
return len(all_matches) > 0 and all_matches[0] # uses the fact that 'and' returns its second argument if its first argument evaluates to True.

然后,你可以这样调用这个函数:

instance = find_instance(lambda x: x.value == 1, [a, b])

然后 instance 将是 a

关于python - 获取某个属性具有特定值的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com