Класс свободен для реализации сравнение любым способом, который он выбирает, и это может выбрать сравнение с Никто не означает что-то (что на самом деле имеет смысл; если кто-то сказал вам реализовать объект None из царапины, как еще вы его получите сравните Истину против себя?).
Практически говоря, нет большой разницы, поскольку пользовательские операторы сравнения встречаются редко. Но вы должны использовать is None как общее правило.
Ответ 2
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Ответ 3
В этом случае они одинаковы. None - одноэлементный объект (существует только один None).
is проверяет, является ли объект тем же самым объектом, а == просто проверяет, эквивалентны ли они.
Например:
p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent
Но так как существует только один None, они всегда будут одинаковыми, а is вернет True.
p = None
q = None
p is q # True because they are both pointing to the same "None"
Ответ 4
Если вы используете numpy,
if np.zeros(3)==None: pass
предоставит вам ошибку, когда numpy проведет элементное сравнение