Кажется, это работает для всего, что на самом деле строка, но что-то, что просто выглядит как строка (например, Unicode или подкласс str или что-то подобное), потерпит неудачу.
>>> class mysub(str):
def __init__(self, *args, **kwargs):
super(mysub, self).__init__(*args, **kwargs)
>>>
>>> q = mysub("")
>>> q is ""
False
>>> q == ""
True
редактировать
В целях проверки кода и обратной связи я хотел бы предположить, что это была плохая практика, потому что он реализует неожиданный тест (даже если мы игнорируем неопределенность того, будет ли он всегда вести себя одинаково при совпадении типов).
if x is ""
Подразумевает, что x имеет правильное значение и тип , но без явного теста типа, который предупредит будущих сопровождающих или пользователей API и т. Д.
if x == ""
Подразумевает, что x имеет правильное значение