0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-08-20

メリットから覚える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 北海道上川郡東神楽町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 . . .

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

「いいよね」よろしく

0
1
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?