python class template 解説(オブジェクト指向を解説)

#メリットから覚えるclass
# pythonを使ってAddress Book classを作ってみた:fountain:。
## 対象となるオブジェクトは、一般的な住所録です。例


| 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 | 北海道上川郡東神楽町１４号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	北海道上川郡東神楽町１４号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,北海道上川郡東神楽町１４号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', '住所': '北海道上川郡東神楽町１４号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 . . .
```

## このような例題書いてくれないとオブジェクト指向のメリット感じないよね!
「いいよね」よろしく