Interesting use of Python's `for...else`. However, maybe it makes sense to move the "no need to update" logic into its own function, like so:

```
def update_needed(self, current, updated):
    return any((field == 'pos' and not same_second(updated['pos'], current['pos'])) or
               (field != 'pos' and updated[field] != current[field]) for field in updated)

def update(self, **kwargs):
    cur = self.getinfo()._asdict()
    if not self.update_needed(cur, kwargs):
        return
    ...
```