こんにちは。まずはこの記事を見ていただきありがとうございます。
実は昨今まで関数だけを羅列したコードを書いていたのですが、
それだとまとまりがないと思い、クラス化してみることに手を出してみました。
ただ最初クラスとして書く際の書き方がいまいち釈然としなかったのもあり、
同じくクラス化をしてみたいと思っていた人の助けになればとおもいますが、
初心者の備忘録的なものと思ってください。
基本的なクラス化の書き方
class Test:
def __init__(self,a):
self.b = a;
def test(self):
print(self.b)
return;
Test("a").test()
# 出力結果
# a
class内ではselfという変数を使って、変数や関数を
呼び出すことができます。
そしてclassの呼び出しの際の変数を指定するのが__init__の個所です。
ここでselfに変数を格納しています。
この時の名前は自由なので、サンプルではbにaを入れています。
そしてclass内の関数に変数を呼び出す際はselfを使用して
呼び出します。
関数の呼び出し
class Test:
def __init__(self,a):
self.b = a;
def test(self):
print(self.b)
return;
def test2(self,b):
self.test()
print(b)
return;
Test("a").test2("b")
# 出力結果
# a
# b
同じclass内の関数を呼び出す際は
self.関数名で呼び出します。
またclass内の関数は別途入力する関数を指定できます。
継承
class Test():
def __init__(self,a):
self.a = a
self.b = "b";
def ta(self,a):
# aを設定
self.a = a
return;
def tb(self,b):
# bを設定
self.b = b
return;
def tt(self,c):
# a,bを表示し、cを設定
print(self.a)
print(self.b)
self.c = c
print(self.c)
return;
class Test2(Test):
def __init__(self,a,b,c):
# 改めてa,b,cを変数として入力
self.ta(a)
self.tb(b)
self.c = c;
def td(self,d):
# dの設定と表示
self.d = d
print(self.d)
return;
def tt2(self,d):
self.tt(self.c)
self.td(d)
return;
Test2('a','b','c').tt2('d')
# 出力結果
# a
# b
# c
# d
継承したクラスの関数の呼び出しです。
変数はセットしないといけないものの、関数はそのまま使えます。
別の関数の呼び出し
class Test():
def __init__(self,a):
self.a = a
self.b = "b";
def ta(self,a):
# aを設定
self.a = a
return;
def tb(self,b):
# bを設定
self.b = b
return;
def tt(self,c):
# a,bを表示し、cを設定
print(self.a)
print(self.b)
self.c = c
print(self.c)
return;
class Test2:
def __init__(self,c):
# 改めてa,b,cを変数として入力
self.c = c;
def td(self,d):
# dの設定と表示
self.d = d
print(self.d)
return;
def tt2(self,a,d):
Test(a).tt(self.c)
self.td(d)
return;
Test2('c').tt2('a','d')
# 出力結果
# a
# b
# c
# d
別の関数を呼び出すときはクラス名.関数名と呼び出します。
この時に最初に入力を求められる変数の入力は必須です。
一応ここまでまとめてみました。いかがだったでしょうか。
小規模なプログラムだとあまりクラス化の恩恵は感じにくいらしいですが、
実際に機能ごとにクラスでまとめられるため、
ソースの整理にうってつけとは思いました。(書き方はややこしくなりますが)
またこのほかに__で囲まれた特殊属性なるものがあるということで、
そちらについてもこれから学んでいきたいと思います。
ご意見や私的などございましたら、気軽にコメントください。