2016-06-23 5 views
-1

Я программирую набор в Python и обнаружил что-то необычное. Этот встроенный метод позволяет сравнить две вещи в классе: & & знак. Первый дает ошибку (s2 не задано). Почему работает только вторая версия (без я)? Другое Встроенный как len() может иметь собственный атрибут.Странное поведение параметра self в классе Python

def __and__(self,s1,s2): 
      table1 = list(s1._iter()) 
      table2 = list(s2._iter()) 
      s1.clear() 
      for element in table2: 
       if element in table1: 
        s1.add(element) 
    def __and__(s1,s2): 
       table1 = list(s1._iter()) 
       table2 = list(s2._iter()) 
       s1.clear() 
       for element in table2: 
        if element in table1: 
         s1.add(element) 
+4

Если вы 'х & y' , тогда первый аргумент '__and__' (условно' self') является 'x', а второй аргумент' y' и * нет третьего аргумента *. Это не странное поведение '' '' ', вы можете назвать первые два аргумента 'bananas' и' cream' и получим такое же поведение, если вы добавили 'chocolate_sauce' в список параметров. – jonrsharpe

+1

Странно, я не думаю, что раньше я видел' && 'operator на Python ... это новое? Когда я попробую в 3.5.1, я просто получаю 'SyntaxError'. – Kevin

ответ

1

Оператор __and__ должен быть переопределен с использованием двух аргументов. Если вы хотите self там, вам нужно self быть левая часть определения (т.е. __and__(self, other). Кроме того, __and__ является побитовое & оператор, а не логический and См. redefine __and__ operator.

 Смежные вопросы

  • Нет связанных вопросов^_^