我定义了一个类,这个类中的对象有一些属性pp1
、pp2
,等等
class example(object):
def __init__(self,pp1,pp2,...):
self.pp1=pp1
self.pp2=pp2
...
for x in range (0,100):
ll[x]=example(pp1[x],pp2[x],...) # pp1[x] pp2[x] are defined somewhere else
ll[30]=example(30.0,40.0,...)
我已经定义了类example
的许多实例ll[x]
。这些属性pp1、pp2等对于每个实例都是唯一的。你知道吗
通常,我们称之为:
ll[x].method()
如果我不知道实例的名称(在本例中是ll[x]
),是否可以用实例的一个或多个属性来确定实例?例如,我希望调用一个实例,它的pp1
是'30.0'(而pp2
是40.0),但我不知道它的名称。(ll[30]
在本例中)
在SQL中,它可能看起来像Select * from example where pp1=30.0 (and pp2=40.0)
,我们可以得到ll[30]
作为它的结果,然后我们可以给.method()
做其他事情。你知道吗
如果不可能的话,有没有别的办法?你知道吗
添加:
感谢Alik提出的使用过滤器的建议。我认为它可以适用于这个例子。但是如果我们不在列表中定义这些实例呢?你知道吗
这听起来像是熊猫数据帧的一个可能用途。如果您喜欢这个解决方案,我可以为您的类展示一个数据帧包装器的示例。这种方法的优点是,随着查询需求的增长,您可以使用pandas语法表示复杂的查询。你知道吗
简单的方法是在内部保存一个实例列表:
然后,您只需过滤列表
example.instances
,即可找到所需的实例。你知道吗或者,如果您希望采用性能更高的方法(具有更快的查找时间),则可以保留一个从每个属性值到具有该值的实例的查找表,如下所示:
这种方法的缺点是它假定实例化后
example
实例是不可变的,并且属性值是可哈希的(否则它们不能用作dict
键)。如果这两个都不是真的,事情就会变得更困难(但不是不可能)。你知道吗要在此方案下查找实例,则只需在相应的查找表中查找属性值:
这将返回其
pp1
为30.0
的所有example
实例的列表。如果没有这样的实例,它将返回一个空列表。你知道吗相关问题 更多 >
编程相关推荐