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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

1948閲覧

どうして'<' not supportedと出てくるのか分かりません。

epipy

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/11/22 15:37

前提・実現したいこと

以下のコードの##########で区切られた所より下の部分で、
print('p1 < p2 =', p1 < p2)
TypeError: '<' not supported between instances of 'MITPerson' and 'MITPerson'
というエラーが出てきます。このソースコードは書籍から持ってきており、全く同じコードを書いています。
書籍では、##########で区切られた所より下の部分の結果は、
p1 < p2 = True
p3 < p2 = False
p4 < p1 = True
となるみたいです。
宜しくお願いします。

該当のソースコード

class Person(object): def __init__(self, name): """"「人間」を形成する""" self.name = name #selfにname(入力)を代入する try: lastBlank = name.rindex(' ') #lastBlankにnameの空白の後ろからの位置番号を代入 #rindex()は()を後ろから探したときの出現位置を返す self.lastName = name[lastBlank + 1:] #姓をself.lastNameに代入 except: #空白が見つからないとき self.lastName = name self.birthday = None #初期化 def getName(self): """selfの名前(フルネーム)を返す""" return self.name def getLastName(self): """selfの姓を返す""" return self.lastName def setBirthday(self, birthdate): """birthdateをdatetime.date型とする selfの生年月日をbirthdateと設定する""" self.birthday = birthdate def getAge(self): """selfの現在の年齢を日単位で返す""" if self.birthday==None: raise ValueError return (datetime.date.today() - self.birthday).days #今日の日付-誕生日 (.daysで日に換算) def __It__(self, other): """selfの名前がotherの名前と比べて アルファベット順で前ならばTrueを、 そうでなければFalseを返す 比較は、姓について行われるが、 姓が同じであれば名前(フルネーム)が比較される""" if self.lastName==other.lastName: #selfの姓がotherの姓とは同じ場合 return self.name < other.name #フルネームの比較に入る return self.lastName < other.lastName #selfの名前がotherの名前と比べてアルファベット順で前 def __str__(self): """selfの名前(フルネーム)を返す""" return self.name class MITPerson(Person): #属性の継承 nextIdNum = 0 #個人識別番号 def __init__(self, name): Person.__init__(self, name) #Personの中のinitを参照 self.idNum = MITPerson.nextIdNum #selfのidNumに、MITPersonのnextIdNumを代入する MITPerson.nextIdNum += 1 #MITPersonのnextIdNumを1増やす def getIdNum(self): return self.idNum def __It__(self, other): return self.idNum < other.idNum p1 = MITPerson('Barbara Beaver') #MITPersonの新しいインスタンスを作成 print(str(p1) + '\'s id number is ' + str(p1.getIdNum())) #まずはクラスMITPersonに関連づけられたメソッド__str__があるか調べる #存在しなければMITPersonのスーパークラスであるPersonに関連付けられた #これにより、self.nameとself.idNumの初期化が起こる #getIdNumがクラスMITPersonにあるか確かめる。(存在する) #MITPerson: Personのサブクラス #Person: MITPersonのスーパークラス ##################################################### p1 = MITPerson('Mark Guttag') p2 = MITPerson('Billy Bob Beaver') p3 = MITPerson('Billy Bob Beaver') p4 = Person('Billy Bob Beaver') print('p1 < p2 =', p1 < p2) print('p3 < p2 =', p3 < p2) print('p4 < p2 =', p4 < p2)

試したこと

print('p1 < p2 =', p1 < p2) を print('p1 < p2 =', str(p1) < str(p2))のように書き換えてみましたが、3つとも全てFalseを返し、上記の書籍に書いているような結果は得られませんでした。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

def It(self, other):
...

Itではなくltです。小文字のエルです。

投稿2018/11/22 15:40

LouiS0616

総合スコア35658

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

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

epipy

2018/11/22 15:48

非常に初歩的なミスでした。 迅速なご回答ありがとうございました!
LouiS0616

2018/11/22 15:51

じっくり観察してみると、メソッド名は全て小文字から始まっていることに気付くと思います。 このような特徴に気付けるとミスを減らせます。
epipy

2018/11/22 15:54

確かに、そのような特徴がありますね。 今後に生かしたいと思います。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問