По шагам:
1️⃣Создаётся объект x класса AlwaysEqual.
2️⃣Выражение x == None вызывает метод x.__eq__(None), который всегда возвращает True.
3️⃣Выражение x is None не вызывает __eq__, а просто проверяет: это тот же самый объект, что и None, или нет.
4️⃣x — обычный экземпляр класса, а не объект None, поэтому результат False.
5️⃣На экран выводится True False.
Почему это важно:
Проверку на None нужно писать только через is None и is not None. Иначе перегруженный __eq__ может дать неожиданный результат и сломать логику условий.
Post #4723
952
- ✍ 4