見出し画像

Python学習 10日目 (クラスの継承と標準ライブラリ)

20時間費やすとその分野にある程度詳しくなれるかまたは上達できる。という20時間の法則がある。現在13時間目で,Python3入門編を終わろうとしているので案外正しいかもしれない。

メモ

・クラスを継承したとき,定義されていないメソッドが呼び出されると,自動的にスーパークラスのメソッドを呼び出す。

・クラスを継承

class MagicBox(Box):

・メソッドをオーバーライド…スーパークラスと同じ名前のメソッドを定義すると,サブクラスでメソッドを再定義できる。

・Pythonでは,完全なプライベートメソッドやプライベート変数を実現することはできない。(詳しくはネームマングリングについて)

・スーパークラスのメソッドを呼び出すには

class Wizard(Player):
   def __init__(self):
       super().__init__("魔法使い")   #super()として呼び出す

・同じクラス内にあるメソッドを同じクラス内で利用できる

class Wizard(Player):
    def attack(self, enemy):
        self.__spell()         #同じクラス内のメソッドを利用
        print(self.name + "は、" + enemy + "に炎を放った!")
    def __spell(self):
        print("ズバーン!")

・クラス変数とクラスメソッド

class Player:

    __charactor_count = 0

    @classmethod    #デコレータでクラスメソッドを作成
    def summary(cls):    #cls :クラス自体が入る引数
        print(str(Player.__charactor_count) + "人で、スライムを攻撃した。")

    def __init__(self, name):
        self.name = name
        Player.__charactor_count += 1  #カウントを更新
        print(str(Player.__charactor_count) + "番目のプレイヤー、" + self.name + "が登場した。")

    def attack(self, enemy):
        print(self.name + "は、" + enemy + "を攻撃した!")

class Wizard(Player):
    def __init__(self):
        super().__init__("魔法使い")    #superクラスのメソッドを呼び出す

    def attack(self, enemy):
        self.__spell()
        print(self.name + "は、" + enemy + "に炎を放った!")

    def __spell(self):
        print("ズバーン!")

print("=== パーティーでスライムと戦う ===")

hero = Player("勇者")
warrior = Player("戦士")
wizard = Wizard()

party = [hero, warrior, wizard]

for member in party:
    member.attack("スライム")

Player.summary()     #クラスメソッドを呼び出す

・標準ライブラリはモジュール単位で整理されている

・モジュールからクラスをインポート

from モジュール import クラス1, クラス2, クラス3

学習時間

・1時間15分

・計13時間30分

この記事が気に入ったらサポートをしてみませんか?