メリットから覚えるclass
pythonを使ってAddress Book classを作ってみた
。
対象となるオブジェクトは、一般的な住所録です。例
ID | 名前 | 性別 | 血液型 | 生年月日 | 携帯番号 | メール | 郵便番号 | 住所 |
---|---|---|---|---|---|---|---|---|
1 | 関 波子 | 女 | AB | 1980/7/31 | 090-7787-3784 | sk@eaccess.net | 135-0034 | 東京都江東区永代8-1-4 |
2 | 小倉 準司 | 男 | A | 1973/10/8 | junzi-kokura@eaccess.net | 071-1544 | 北海道上川郡東神楽町14号6-13-1 | |
3 | 西村 有紀子 | 女 | O | 1972/12/5 | 090-5165-2074 | okikuy1972@livedoor.com | 635-0805 | 奈良県北葛城郡広陵町萱野5-2-7 ヴェルテックス萱野 1009 |
4 | 谷 僧三郎 | 男 | B | 1989/1/17 | 090-3781-1181 | suzbrutn@dsn.ad.jp | 520-0011 | 滋賀県大津市南志賀2868 |
5 | 山口 和久 | 男 | A | 1973/2/21 | 070-4790-1232 | kazuhisa73@geocities.com | 012-0813 | 秋田県湯沢市前森1-11-7 |
6 | 米田 一生 | 男 | O | 1984/7/25 | issei07@dsn.ad.jp | 264-0029 | 千葉県千葉市若葉区桜木北4-13-4 | |
7 | 村松 希美江 | 女 | O | 1980/11/21 | 090-4849-6939 | kimie.muramatu@odn.ne.jp | 616-8151 | 京都府京都市右京区太秦帷子ヶ辻町6-6-7 |
8 | 小野寺 眞八 | 男 | O | 1986/4/28 | 090-1457-0772 | ondr.sny@gmo-media.jp | 527-0135 | 滋賀県東近江市横溝町6-6-7 |
9 | 志村 陽一郎 | 男 | O | 1975/7/8 | smr-yutru@dion.ne.jp | 048-1321 | 北海道磯谷郡蘭越町湯里5-9-5 ル・メール湯里 | |
10 | 鎌田 敏美 | 女 | B | 1993/6/9 | 090-5690-8749 | kamata0609@example.com | 409-0115 | 山梨県上野原市松留4631 |
クラスを定義してみましょう。
address.py
class AddressBook:
def __init__(self,str): #タブ区切りデータ
x=str.split('\t')
self.ID =x[0]
self.名前 =x[1]
self.性別 =x[2]
self.血液型 =x[3]
self.生年月日 =x[4]
self.携帯番号 =x[5]
self.メール =x[6]
self.郵便番号 =x[7]
self.住所 =x[8]
#文字列データからのデータのセット
def sets(self,ID,名前,性別,血液型,生年月日,携帯番号,メール,郵便番号,住所):
self.ID = ID
self.名前 = 名前
self.性別 = 性別
self.血液型 = 血液型
self.生年月日 = 生年月日
self.携帯番号 = 携帯番号
self.メール = メール
self.郵便番号 = 郵便番号
self.住所 = 住所
def getDict(self): #dict形式を返す
return self.__dict__
def gets(self): # 内部データの配列化
return [self.ID,self.名前,self.性別,self.血液型,self.生年月日,self.携帯番号,self.メール,self.郵便番号,self.住所]
def out(self):
print(",".join(self.gets()))
test.py
d='''1 関 波子 女 AB 1980/7/31 090-7787-3784 sk@eaccess.net 135-0034 東京都江東区永代8-1-4
2 小倉 準司 男 A 1973/10/8 junzi-kokura@eaccess.net 071-1544 北海道上川郡東神楽町14号6-13-1
3 西村 有紀子 女 O 1972/12/5 090-5165-2074 okikuy1972@livedoor.com 635-0805 奈良県北葛城郡広陵町萱野5-2-7 ヴェルテックス萱野 1009
4 谷 僧三郎 男 B 1989/1/17 090-3781-1181 suzbrutn@dsn.ad.jp 520-0011 滋賀県大津市南志賀2868
5 山口 和久 男 A 1973/2/21 070-4790-1232 kazuhisa73@geocities.com 012-0813 秋田県湯沢市前森1-11-7
6 米田 一生 男 O 1984/7/25 issei07@dsn.ad.jp 264-0029 千葉県千葉市若葉区桜木北4-13-4
7 村松 希美江 女 O 1980/11/21 090-4849-6939 kimie.muramatu@odn.ne.jp 616-8151 京都府京都市右京区太秦帷子ヶ辻町6-6-7
8 小野寺 眞八 男 O 1986/4/28 090-1457-0772 ondr.sny@gmo-media.jp 527-0135 滋賀県東近江市横溝町6-6-7
9 志村 陽一郎 男 O 1975/7/8 smr-yutru@dion.ne.jp 048-1321 北海道磯谷郡蘭越町湯里5-9-5 ル・メール湯里
10 鎌田 敏美 女 B 1993/6/9 090-5690-8749 kamata0609@example.com 409-0115 山梨県上野原市松留4631'''
abook=[AddressBook(x) for x in d.split('\n')]
for x in abook:
x.out()
result.txt
1,関 波子,女,AB,1980/7/31,090-7787-3784,sk@eaccess.net,135-0034,東京都江東区永代8-1-4
2,小倉 準司,男,A,1973/10/8,,junzi-kokura@eaccess.net,071-1544,北海道上川郡東神楽町14号6-13-1
3,西村 有紀子,女,O,1972/12/5,090-5165-2074,okikuy1972@livedoor.com,635-0805,奈良県北葛城郡広陵町萱野5-2-7 ヴェルテックス萱野 1009
4,谷 僧三郎,男,B,1989/1/17,090-3781-1181,suzbrutn@dsn.ad.jp,520-0011,滋賀県大津市南志賀2868
5,山口 和久,男,A,1973/2/21,070-4790-1232,kazuhisa73@geocities.com,012-0813,秋田県湯沢市前森1-11-7
6,米田 一生,男,O,1984/7/25,,issei07@dsn.ad.jp,264-0029,千葉県千葉市若葉区桜木北4-13-4
7,村松 希美江,女,O,1980/11/21,090-4849-6939,kimie.muramatu@odn.ne.jp,616-8151,京都府京都市右京区太秦帷子ヶ辻町6-6-7
8,小野寺 眞八,男,O,1986/4/28,090-1457-0772,ondr.sny@gmo-media.jp,527-0135,滋賀県東近江市横溝町6-6-7
9,志村 陽一郎,男,O,1975/7/8,,smr-yutru@dion.ne.jp,048-1321,北海道磯谷郡蘭越町湯里5-9-5 ル・メール湯里
10,鎌田 敏美,女,B,1993/6/9,090-5690-8749,kamata0609@example.com,409-0115,山梨県上野原市松留4631
Press any key to continue . . .
女性のみを表示するには、
for x in abook:
if x.性別=='女': x.out()
1,関 波子,女,AB,1980/7/31,090-7787-3784,sk@eaccess.net,135-0034,東京都江東区永代8-1-4
3,西村 有紀子,女,O,1972/12/5,090-5165-2074,okikuy1972@livedoor.com,635-0805,奈良県北葛城郡広陵町萱野5-2-7 ヴェルテックス萱野 1009
7,村松 希美江,女,O,1980/11/21,090-4849-6939,kimie.muramatu@odn.ne.jp,616-8151,京都府京都市右京区太秦帷子ヶ辻町6-6-7
10,鎌田 敏美,女,B,1993/6/9,090-5690-8749,kamata0609@example.com,409-0115,山梨県上野原市松留4631
Press any key to continue . . .
このようにすっきり書くことができる。
結局やりたかったことは、クラスを定義するとJson形式にすぐに変換できるORM(Object-relational mapping)が簡単になることなんだ。
for x in abook:
print(x.getDict())
{'ID': '1', '名前': '関 波子', '性別': '女', '血液型': 'AB', '生年月日': '1980/7/31', '携帯番号': '090-7787-3784', 'メール': 'sk@eaccess.net', '郵便番号': '135-0034', '住所': '東京都江東区永代8-1-4'}
{'ID': '2', '名前': '小倉 準司', '性別': '男', '血液型': 'A', '生年月日': '1973/10/8', '携帯番号': '', 'メール': 'junzi-kokura@eaccess.net', '郵便番号': '071-1544', '住所': '北海道上川郡東神楽町14号6-13-1'}
{'ID': '3', '名前': '西村 有紀子', '性別': '女', '血液型': 'O', '生年月日': '1972/12/5', '携帯番号': '090-5165-2074', ' メール': 'okikuy1972@livedoor.com', '郵便番号': '635-0805', '住所': '奈良県北葛城郡広陵町萱野5-2-7 ヴェルテックス萱野 1009'}
{'ID': '4', '名前': '谷 僧三郎', '性別': '男', '血液型': 'B', '生年月日': '1989/1/17', '携帯番号': '090-3781-1181', 'メ ール': 'suzbrutn@dsn.ad.jp', '郵便番号': '520-0011', '住所': '滋賀県大津市南志賀2868'}
{'ID': '5', '名前': '山口 和久', '性別': '男', '血液型': 'A', '生年月日': '1973/2/21', '携帯番号': '070-4790-1232', 'メ ール': 'kazuhisa73@geocities.com', '郵便番号': '012-0813', '住所': '秋田県湯沢市前森1-11-7'}
{'ID': '6', '名前': '米田 一生', '性別': '男', '血液型': 'O', '生年月日': '1984/7/25', '携帯番号': '', 'メール': 'issei07@dsn.ad.jp', '郵便番号': '264-0029', '住所': '千葉県千葉市若葉区桜木北4-13-4'}
{'ID': '7', '名前': '村松 希美江', '性別': '女', '血液型': 'O', '生年月日': '1980/11/21', '携帯番号': '090-4849-6939', 'メール': 'kimie.muramatu@odn.ne.jp', '郵便番号': '616-8151', '住所': '京都府京都市右京区太秦帷子ヶ辻町6-6-7'}
{'ID': '8', '名前': '小野寺 眞八', '性別': '男', '血液型': 'O', '生年月日': '1986/4/28', '携帯番号': '090-1457-0772', ' メール': 'ondr.sny@gmo-media.jp', '郵便番号': '527-0135', '住所': '滋賀県東近江市横溝町6-6-7'}
{'ID': '9', '名前': '志村 陽一郎', '性別': '男', '血液型': 'O', '生年月日': '1975/7/8', '携帯番号': '', 'メール': 'smr-yutru@dion.ne.jp', '郵便番号': '048-1321', '住所': '北海道磯谷郡蘭越町湯里5-9-5 ル・メール湯里'}
{'ID': '10', '名前': '鎌田 敏美', '性別': '女', '血液型': 'B', '生年月日': '1993/6/9', '携帯番号': '090-5690-8749', 'メ ール': 'kamata0609@example.com', '郵便番号': '409-0115', '住所': '山梨県上野原市松留4631'}
Press any key to continue . . .
このような例題書いてくれないとオブジェクト指向のメリット感じないよね!
「いいよね」よろしく