Ваш класс по существу представляет собой строки Tony
и Stark
.
Для оператора или , первое значение оценивается, если оно оценивается как True, оно печатается, в противном случае мы переходим ко второму значению и оцениваем его, и печатаем его
В приведенном ниже примере первая строка оценивается как True, поскольку bool(string)
всегда оценивается как True
In [15]: bool('Tony')
Out[15]: True
In [17]: bool('Stark')
Out[17]: True
In [12]: 'Tony' or 'Stark'
Out[12]: 'Tony'
In [14]: 'Stark' or 'Tony'
Out[14]: 'Stark'
Но если у вас есть None
, который оценивается как False, мы увидим другой результат.
In [23]: bool(None)
Out[23]: False
In [21]: 'Stark' or None
Out[21]: 'Stark'
In [22]: 'Tony' or None
Out[22]: 'Tony'
In [18]: None or 'Tony'
Out[18]: 'Tony'
In [20]: None or 'Stark'
Out[20]: 'Stark'
Для операторов и , только когда оба значения имеют значение true, значение оценивается как true, а второе значение выбирается
In [24]: 'Tony' and 'Stark'
Out[24]: 'Stark'
In [25]: 'Stark' and 'Tony'
Out[25]: 'Tony'
Но если один из них оценивается как False, значение не будет отображаться.
In [31]: 'Stark' and None
In [32]: 'Tony' and None
In [33]: None and 'Tony' In [34]: None and 'Stark'