2016-06-23 6 views
-1

私はPythonでプログラミングを設定しており、珍しいものを発見しました。この組み込みメソッドは、クラス内の2つのものを& &符号で比較します。最初にエラーが返されます(s2は指定されていません)。 2番目のバージョンのみが機能しているのはなぜですか?その他len()のような組み込み関数は自己アトリビュートを持つことができます。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

あなたが行う場合は、 'X&y' '__and__'(通常は' self')の最初の引数は 'x'で、2番目の引数は' y'で3番目の引数*はありません。これは奇妙な 'self'の動作ではありません。最初の2つの引数 'bananas'と' cream'がパラメータリストに 'chocolate_sauce'を追加しても同じ動作をします – jonrsharpe

+1

奇妙なことに、私はPythonで' && '演算子を見たことがないと思います... Isそれは新しいですか?3.5.1で試してみると、私は 'SyntaxError'を得るだけです。 – Kevin

答えて

1

__and__オペレータは、2つの引数を使用して再定義されると想定されます。あなたがそこにselfをしたい場合は、また、__and__はビット単位&オペレータではなく、論理的andある__and__(self, other)selfは、定義の左部分(すなわちようにする必要があります。redefine __and__ operatorを参照してください。