2016-06-23 11 views
-1

Ich programmiere in Python und entdeckte etwas Ungewöhnliches. Diese integrierte Methode ermöglicht es uns, zwei Dinge in der Klasse durch & & Zeichen zu vergleichen. Erster gibt Fehler (s2 ist nicht gegeben). Warum funktioniert nur die zweite Version (ohne Selbst)? Andere eingebaute wie len() können selbst Attribut haben.Seltsames Verhalten des Selbstparameters in Python-Klasse

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

Wenn Sie das tun 'x & y' , dann ist das erste Argument zu '__and__' (konventionell' self') 'x' und das zweite Argument ist' y' und * es gibt kein drittes Argument *. Dies ist kein merkwürdiges 'self' Verhalten, man könnte das die ersten beiden Argumente 'banana' und' cream' und das gleiche Verhalten, wenn du 'chocolate_sauce' in die Parameterliste fügst – jonrsharpe

+1

Komisch, ich glaube nicht, dass ich den' && 'Operator in Python schon gesehen habe ... Wenn ich es in 3.5.1 versuche, bekomme ich 'SyntaxError'. – Kevin

Antwort

1

Der Operator __and__ soll mit zwei Argumenten neu definiert werden. Wenn Sie self dort wollen, müssen Sie self der linke Teil der Definition sein (dh __and__(self, other). Auch __and__ die bitweise & Operator ist, nicht die logische and. redefine __and__ operator See.