擅长:python、mysql、java
<p>简单的方法是在内部保存一个实例列表:</p>
<pre><code>class example(object):
instances = []
def __init__(self, pp1, pp2, ...):
self.pp1 = pp1
self.pp2 = pp2
...
example.instances.append(self)
</code></pre>
<p>然后,您只需过滤列表<code>example.instances</code>,即可找到所需的实例。你知道吗</p>
<p>或者,如果您希望采用性能更高的方法(具有更快的查找时间),则可以保留一个从每个属性值到具有该值的实例的查找表,如下所示:</p>
<pre><code>class example(object):
pp1_lookup = {}
pp2_lookup = {}
...
def __init__(self,pp1,pp2,...):
self.pp1=pp1
self.pp2=pp2
...
example.pp1_lookup.setdefault(pp1,[]).append(self)
example.pp2_lookup.setdefault(pp2,[]).append(self)
...
</code></pre>
<p>这种方法的缺点是它假定实例化后<code>example</code>实例是不可变的,并且属性值是可哈希的(否则它们不能用作<code>dict</code>键)。如果这两个都不是真的,事情就会变得更困难(但不是不可能)。你知道吗</p>
<p>要在此方案下查找实例,则只需在相应的查找表中查找属性值:</p>
<pre><code>examples = example.pp1_lookup.get(30.0, [])
</code></pre>
<p>这将返回其<code>pp1</code>为<code>30.0</code>的所有<code>example</code>实例的列表。如果没有这样的实例,它将返回一个空列表。你知道吗</p>