擅长:python、mysql、java
<blockquote>
<p>Is there anything strange that could go wrong due to the use of the
<code>__len__</code> method here?</p>
</blockquote>
<p>取决于预期用途和限制。什么样的行为可以将出错的东西与“python就是这样工作的”区别开来?你知道吗</p>
<p>如果您想要的是一个对象为它“注册”的其他对象提供相应的ID,那么下面是一个不那么令人惊讶的实现:</p>
<pre><code>class ConseqIds:
def __init__(self):
self.ctr = 0
self.elements = {}
def assign_next(self, obj):
self.elements[obj] = self.ctr
self.ctr += 1
def __getitem__(self, item):
if not item in self.elements:
self.assign_next(item)
return self.elements[item]
ids = ConseqIds()
print(ids['first element'])
print(ids['second element'])
ids.assign_next('third element')
</code></pre>
<p>你将避免许多边缘情况,并确定它做什么。你知道吗</p>