If I understand the evaluation of this function properly, this won't work correctly if other is None. What'll happen here is other will be evaluated (as None), then the and clause will be evaluated, causing a method resolution failure on get_job().

This is a fairly easy mistake to make, since it looks like this wants to read "if other and self.get_job() == other.get_job(): ...". In that case, an evaluation of False for the first segment of the if clause would indeed short-circuit, giving the desired result.

Perhaps rewrite this: "return self.get_job() == other.get_job() if other else False". I'm okay with an explicit type check not being performed here, since a failure of the resolution of get_job() should be enough of a clue to callers. Otherwise, I'd recommend doing so here, as well.