44265


Python初心者です。以下は参考書「独学プログラマー（コーリ・アリソフ著）」に記載されているWarというカードゲームのプログラムの一部です。その部分でわからないところがあるので質問させていただきます。

[code]

    class Card:
        suits = ["spades", "hearts", "diamonds", "clubs"]
    
        values = [None, None, "2", "3", "4", "5", "6", "7", "8", "9",
                  "10", "Jack", "Queen", "King", "Ace"]
    
        def __init__(self, v, s):
            """スートも値も整数値です。"""
            self.value = v
            self.suit = s
    
        def __lt__(self, c2):
            if self.value < c2.value:
                return True
    
            if self.value == c2.value:
                if self.suit < c2.suit:
                    return True
                else:
                    return False
    
            return False
    
[/code]

### 質問

`def __lt__(self.
c2)`の部分で`c2.value`や`c2.suit`というところがありますが。何の値が入っている変数なのかよくわかりません。どなたかよろしくお願いします。


CC BY-SA 4.0
2018-05-25T14:11:39.640
44262
2018-05-25T15:06:31.310
2018-05-25T15:06:31.310
19110
28645
question
python
クラスの関数で、self 以外の変数が何なのか分からない


Python ではクラスに `__lt__` という名前のメソッドを定義することで、クラスのインスタンス同士を不等号 `<`
等で比較できるようになります。メソッド `__lt__` には 2 つの引数が渡されることになりますが、一方が自分で、他方が比較される相手です。

今回の `__lt__` にも 2 つの引数 `self` と `c2` があり、どちらも `Card`
クラスのインスタンスであることが期待されています。第一引数の `self` は自分自身であり、第二引数の `c2` は比較相手です。ですから
`c2.value` や `c2.suit` というのは、比較相手の番号やスートのことを指しています。

試しに `Card` クラスのインスタンスを作って比較してみると分かりやすいです。

[code]

    >>> c1 = Card(4, 1)
    >>> c2 = Card(5, 2)
    >>> c1 < c2
    True
    
[/code]

より詳しくは、Python 3 の公式ドキュメントにおける [`object.__lt__(self, other)`
の説明](https://docs.python.jp/3/reference/datamodel.html#object.__lt__)が参考になります。


CC BY-SA 4.0
2018-05-25T14:36:34.887
44265
2018-05-25T14:36:34.887
19110
44262
answer