Python学習コースⅣで理解が追い付かなかったので
復習しながら学習メモを残します。
同じコードだとつまらないし覚えられないので
大好きな「CLOCK ZERO~終焉の一秒~」のゲームネタを交えながら書いていきます。
ネタバレ注意。
クラスを作成する
クラスは「class クラス名:」で定義する
クラス名は大文字で始める
class CZmember:
クラスで何も処理がないときはpassと書く
インデントをそろえる
class CZmember:
pass
処理がない、つまりはまだ2010年の秋より前ってことでしょうねー。
クラスからインスタンスを生成する
「クラス()」とそのクラスを呼び出すことで新しくインスタンスを生成できる
「変数名=クラス()」で生成したクラスを変数に代入できる
空のクラスを生成
class CZmember:
pass
cz_member1 = CZmember()
インスタンスに情報を追加
今回はCZメンバーの名前と年齢にしましょう。
class CZmember:
pass
# インスタンスを作成
cz_member1 = CZmember()
# インスタンスに情報を追加
cz_member1.name = 'Takato'
cz_member1.age = 12
print(cz_member1.name + 'は' + str(cz_member1.age) + 歳です)
Takatoは12歳です
この「name」や「age」の部分をインスタンス変数という
攻略対象が小学生のゲームってなんなんですかねー。
メンバーもさくっと追加しちゃいましょー
class CZmember:
pass
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
cz_member1 = CZmember()
cz_member1.name = 'Takato'
cz_member1.age = 12
cz_member2 = CZmember()
cz_member2.name = 'Riichiro'
cz_member2.age = 11
メンバー7人いるのにわざわざこんなに書くのめんどくさいな。
なのであとで出てくる項目で追加しましょう。
クラスの中に処理を追加する
クラスの中には関数を定義することができる
この関数のことをメソッドと呼ぶ
第1引数には必ずselfを追加する
class CZmember():
def info(self):
print('CZメンバーの名前と年齢が表示されます')
**クラスの中で定義したメソッドを呼び出す** メソッドの呼び出しは「インスタンス.メソッド名()」でできる
class CZmember():
def info(self):
print('CZメンバーの名前と年齢が表示されます')
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
cz_member0.info()
cz_member1 = CZmember()
cz_member1.name = 'Takato'
cz_member1.age = 12
cz_member1.info()
cz_member2 = CZmember()
cz_member2.name = 'Riichiro'
cz_member2.age = 11
cz_member2.info()
CZメンバーの名前と年齢が表示されます
CZメンバーの名前と年齢が表示されます
CZメンバーの名前と年齢が表示されます
クラスの中で定義し、インスタンスについて呼び出すメソッドのことを
インスタンスメソッドという
インスタンスメソッドの正体
インスタンスメソッドの第1引数であるselfには、そのメソッドを呼び出したインスタンス自身が代入されている
class CZmember():
def info(self):
print(self.name)
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
cz_member0.info()
↑だと、
cz_member0.info() とすることで
self = cz_member0
となっている
つまり、メソッド内でself.name にすると
cz_member0.nameということになる。
class CZmember():
def info(self):
print(self.name) #selfの部分に呼び出したインスタンスが代入される
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
cz_member0.info() #print(cz_member0.name)が返される
cz_member1 = CZmember()
cz_member1.name = 'Takato'
cz_member1.age = 12
cz_member1.info() #print(cz_member1.name)が返される
cz_member2 = CZmember()
cz_member2.name = 'Riichiro'
cz_member2.age = 11
cz_member2.info() #print(cz_member2.name)が返される
Nadeshiko
Takato
Riichiro
これを利用して、メンバーの名前と年齢を出力してみる
class CZmember():
def info(self):
print(self.name + 'は' + str(self.age) + '歳です')
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
cz_member0.info()
cz_member1 = CZmember()
cz_member1.name = 'Takato'
cz_member1.age = 12
cz_member1.info()
cz_member2 = CZmember()
cz_member2.name = 'Riichiro'
cz_member2.age = 11
cz_member2.info()
Nadeshikoは12歳です
Takatoは12歳です
Riichiroは11歳です
また戻り値として返すこともできる
class CZmember():
def info(self):
#return の時はかっこではくくらない
return self.name + 'は' + str(self.age) + '歳です'
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
# 値が戻って来るだけなので、出力するときにはprintをする
print (cz_member0.info())
cz_member1 = CZmember()
cz_member1.name = 'Takato'
cz_member1.age = 12
print (cz_member1.info())
cz_member2 = CZmember()
cz_member2.name = 'Riichiro'
cz_member2.age = 11
print (cz_member2.info())
Nadeshikoは12歳です
Takatoは12歳です
Riichiroは11歳です
インスタンスメソッドのまとめ
2020年(10年後)の彼らの年齢を求めるための
インスタンスメソッドを追加する
class CZmember():
def info(self):
#return の時はかっこではくくらない
return self.name + 'は' + str(self.age) + '歳です'
def age_y2020(self, year):
after_age = self.age + year
return after_age
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
y = 10
result = cz_member0.age_y2020(y)
print (str(y) + '年後' + cz_member0.name + 'は' + str(result) + '歳です')
10年後Nadeshikoは22歳です
__init__メソッド
「クラス()」でインスタンスを生成した直後に自動で呼び出される
class CZmember:
def __init__(self):
print ('新しいCZメンバーが増えました')
def info(self):
return self.name + 'は' + str(self.age) + '歳です'
cz_member0 = CZmember()
cz_member0.name = 'Nadeshiko'
cz_member0.age = 12
print (cz_member0.info())
cz_member1 = CZmember()
cz_member1.name = 'Takato'
cz_member1.age = 12
print (cz_member1.info())
cz_member2 = CZmember()
cz_member2.name = 'Riichiro'
cz_member2.age = 11
新しいCZメンバーが増えました
Nadeshikoは12歳です
新しいCZメンバーが増えました
Takatoは12歳です
新しいCZメンバーが増えました
最後にprintをしていないので、理一郎の情報は表示されないが、
インスタンスは追加したので、
自動で呼び出される__init__メソッドの「新しいCZメンバーが増えました」というメッセージは表示される
__init__メソッドで変数を扱う
インスタンス生成直後にインスタンス変数に値を代入する
class CZmember():
def __init__(self):
self.name = 'Toranosuke'
sel.age = 12
cz_member3 = CZmember()
print (cz_member3.name)
print (cz_member3.age)
Toranosuke
12
でもこれだと全部同じ値になってしまうのでは?
__init__メソッドに引数を渡す
class CZmember():
def __init__(self,name)
self.name = name
cz_member3 = CZmember(Toranosuke)
print (cz_member3.name)
Toranosuke
引数は複数渡すこともできる
class CZmember():
def __init__(self,name,age)
self.name = name
self.age = age
cz_member3 = CZmember(Toranosuke,12) #インスタンス生成、名前と年齢の設定がこの1行でできる
print (cz_member3.name)
print (cz_member3.age)
Toranosuke
12
(続きは随時更新)
「CLOCK ZERO~終焉の一秒~」
Switchでも発売されているゲームでめっちゃ泣けるので
気になる方はぜひプレイしてみてください。