Для одного из моих сайтов мне нужно проверить, определены ли несколько атрибутов класса, а не пустые. До сих пор я с радостью использовал 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 поощряет только один путь и только один путь, а оператор + уже кажется интуитивным способом конкатенации строк.