Для одного из моих сайтов мне нужно проверить, определены ли несколько атрибутов класса, а не пустые. До сих пор я с радостью использовал if self.attr:
, который, на мой взгляд, является сокращением для if self.attr is not None and self.attr is not '':
или любым другим значением undefined атрибута.
Это прекрасно работает, но при проверке нескольких атрибутов строк уступает удивительному поведению. '' and ''
не False
(как я и ожидал), но ''
.
Возникает вопрос: существуют ли другие типы, для которых оператор and
не приводит к приведению типа к bool
?
Я не могу придумать пример, где это различие в поведении приведет к фактическому разному результату для if
-clause (в конце концов, ''
по-прежнему оценивается до False
), но я оставил ощущение, что есть крайние случаи, которые могут быть ловушкой.
Наконец, я хотел бы узнать, знает ли кто, почему это было реализовано именно так? Я думал, что Zen of Python поощряет только один путь и только один путь, а оператор +
уже кажется интуитивным способом конкатенации строк.