LoginSignup
0
3

More than 3 years have passed since last update.

【progate復習】Python Ⅳ (随時更新)

Last updated at Posted at 2020-07-14

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でも発売されているゲームでめっちゃ泣けるので
気になる方はぜひプレイしてみてください。

0
3
0

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
3