перегрузка оператора с помощью и или операторов - PullRequest
0 голосов
/ 19 апреля 2019

Я не понимаю, как работает программа " и " и " или " в программе.Помогите мне понять, как он работает правильно.

class A:
    def __init__(self,a):
        self.a=a
    def show(self):
        print(self.a)

class B(A):
    def __init__(self,b):
        self.a=b
    def __str__(self):
        return "({0})".format(self.a)
    def __add__(self,other):
        return self.a+other.a

E=B("Tony")
R=B("Stark")

print(E or R)
print(E and R)
print(E+R)

1 Ответ

0 голосов
/ 19 апреля 2019

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