質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

797閲覧

classを呼び出した時の、関数の動きが分かりません。

to_hu

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/03 23:47

編集2021/06/04 01:00

関数同士の繋がりが分かりません。
下記のコードは、本を参考にカードゲームを作成している途中です。

【疑問点】
card1 = Card(11,1)を呼び出した時に、
Cardクラスのすべての関数が動くのですか?
だとしたら、def lt の(c2)の値はどう関わってくるのでしょうか。
よろしくお願い致します。

【分からないコード】

class Card: marks = ['spades','hearts','diamonds','clubs'] values = [None,None, '2','3','4','5','6','7','8','9', '10','Jack','Queen','King','Ace'] def __init__(self,v,m): #markもvalueも整数値 self.value = v self.mark = m def __lt__(self,c2): if self.value < c2: return True if self.value == c2: if self.mark < c2: return True else: return False return False def __gt__(self,c2): if self.value > c2: return True if self.value == c2: if self.mark > c2: return True else: return False return False def __repr__(self): v = self.values[self.value] + 'of' + self.marks[self.mark] return v card1 = Card(11,1) card2 = Card(11,2) print(card1 < card2) コード

【表示結果】
False

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

udon-ken

2021/06/04 00:27

そもそもコードを見る限りclass Cardというものが定義されていません。 それと、コードはコードの挿入機能を使って書いて下さい。 読みづらいです。 あと、謎に見出しが使われているので整理して下さい。 というか、pythonはインデントが重要ですのでインデントが削除された状態では読めません。
takasima20

2021/06/04 00:36

def hoge は def __hoge__ だったりしませんか?
TakaiY

2021/06/04 01:04

このままでは読みにくいので、コードの挿入機能を使って書いてください。 見出しが使われているのは、ソースのコメンドがMarkDownの見出しだからです。 特殊メソッドは「__」で囲まれてますが、MarkDownだとイタリック指定になります。
takasima20

2021/06/04 02:17

お、なるほどです。 > TakaiYさん
guest

回答2

0

ベストアンサー

クラスの定義を見ると、特殊メソッドについての学習用のようですね。
特殊メソッドで検索するといろいろ解説が出ていますが、参考までにこのサイトを上げておきます

クラスのインスタンスが生成されたときにはいくつかのメソッドが呼ばれますが、定義した中で呼ばれるのは、__init__だけです。

他の__lt__は 「<演算子(less than)」が使われたとき、__gt__は「>演算子(greater than)」が使われたときにそれぞれ呼ばれます。コードでも比較が行なわれていて、定義通りの動作をするだろうと思われます。

投稿2021/06/04 01:13

TakaiY

総合スコア12657

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

to_hu

2021/06/04 01:18

ご指摘ありがとうございます。 とてもスッキリしました。 厚い雲が晴れました。 本当にありがとうございました。
guest

0

クラス内で定義されている関数のように見えるものは、メソッドと呼びます。

クラスを呼び出すというのは、クラス名に引数を指定してコンストラクタを呼ぶことでしょうか。

その場合は、以下の部分だけが動きます。

python

1def __init__(self,v,m): 2 self.value = v 3 self.mark = m

def lt の(c2)の値はどう関わってくるのでしょうか。とのことですが、

explanation

1__lt__と__gt__ は、クラスのインスタンスオブジェクト同士を比較演算子("<", ">")などで 2比較する場合に使われます。 3また、__repr__はクラスのインスタンスオブジェクトを表示する場合に使われます。

説明は、3.3. 特殊メソッド名に書いてありますが、初心者の方には難しいでしょう。

explanation

1簡単に言うと、Pythonのソースを解析したときに、「<は__lt__に置き換える」 2ということをもう少し複雑にやっているということだと思ってください。

投稿2021/06/04 01:09

編集2021/06/04 01:12
ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

to_hu

2021/06/04 01:16

ご指摘ありがとうございます。 理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問