難解のクラスを作る-1 (完)

オブジェクト指向言語には、良く分からないクラスと云うものが有ります。 いまネットやyoutubeでPython、JAVA,Rubyなどなどを教えておられるプロの方々でさへも、やはりここで躓いたと言っております。

それなら初学者の自分が理解できないのは当たり前かと安心・納得しました。 とは言えこれを理解すると、Pythonの新世界が開けるとも言われておりますので、ここは簡単に騙されてもう一度チャレンジすることに致しました。

クラスと聞いても良く分かりませんが、実は知らぬ間にクラスを使っているのです。 例えばラベルとかコマンドボタン等はウイジェットと言う親クラスを元にした子クラスなのです。 ますますわからなくなる場合もあります・・・

# 1.親クラスとインスタンス発生の簡単な例
# ゲームでよく使うキャラクターを例にします。
 
class Charactor: #クラス名の初めは必ず大文字(これを間違えるとプログラムが始まらない)
    def __init__(self, name, age, sex): # selfは絶対付ける、名前・年令・性別を親キャラのデータとなる
        self.name = name
        self.age = age
        self.sex = sex
#ここまではおまじないと思って覚えて(メモって)下さい。今は説明聴いても理解できない。
# これで親クラスの属性(データです)設定は終わりです。
 
# 親クラスを元にした子供(インスタンス)のメソッド(動作)を設定します。
    def show_data(self):
        #print(“My name is {} and {} years old, {}.”.format(self.name, self.age, self.sex)) # これでも動作する
        print(f’My name is {self.name} and {self.age} years old, {self.sex}.’) # ↑も動作するが、こちらの方が分かり易い!

chara1 = Charactor(‘Bear’, 25, ‘Male’) # chara1のデータを、親クラスのプログラムを使ってshow_data()関数に送る
chara1.show_data() # chara1のデータを使って、show_data()関数を動作させる、即ちprint(表示)させる。 
 # 表示はこうなる —> My name is Bear and 25 years old, Male.
 
#————————————————

# 2 子クラス(Villager)を作る、言葉(line)を追加する
class Charactor: # 親クラスの設定は変更しない
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def show_data(self): # 子クラスのデータを表示するメソッドを作る
        print(“My name is {} and {} years old, {}.”.format(
            self.name, self.age, self.sex))

    def speak(self):  # villager1が喋る言葉を表示するメソッドを作る
        #print(“My name is {}. {}.”.format(self.name, self.line))
        print(f’My name is {self.name}. {self.line}’) # こちらが新しい文字列のformat例(’や”に注意)

class Villager(Charactor): # Villagerの子クラスを作る(括弧の中が親クラス)
    def __init__(self, name, age, sex, line): # ここで話す言葉(line)を追加しておく
        super().__init__(name, age, sex)# 親クラスのデータはそのまま引き継ぐと明言しておく
        self.line = line # 追加のデータ

villager1 = Villager(“apple seller”, 35, “Male”, “Need apples?”) # villager1のデータを設定する
#villager1.show_data() #ここは親クラスと同じなのでprintしない
villager1.speak() #—> 親クラスで宣言したnameと追加したlineをprint()した。
  # —> My name is apple seller. Need apples?.
 
#————————————————
 
#いよいよゲームならお助けマンの出場です。 
 
# 3 親クラス(Charactor)を継承し、機能を追加したヒーロークラス(hero)を作る
# 体力(hp=physical power)、経験値(exp=experience point)、魔女値 (mj=mojo)
# super().__init__(name, age, sex) と言うのが出てきますが、親クラスで定義したメソッドを、
#     子クラスで同じメソッド名を記述して処理内容を上書きすることで、オーバーライドと言います。
#「親クラスと同じ名前のメソッドを子クラスで新たに定義すること」とも言えます。
# クラスの継承を自由自在に使いこなせるようになると、オブジェクト指向の恩恵を受けられるようになるようです。
#                ☝やがて理解できます。 

class Hero(Charactor):
    def __init__(self, name, age, sex, hp, exp, mj):
        super().__init__(name, age, sex) #親クラスの属性はそのまま継承するオーバーライドです。
        self.hp = hp
        self.exp = exp
        self.mj = mj

    def healing(self): # 体力は魔力に応じて回復する
        self.hp += self.mj
        print(f’体力が{self.mj}回復しました。’)
        print(f’現在の体力は{self.hp}です。’)

hero1 = Hero(‘マジンガー’, 80, ‘male’, 100, 200, 300)
hero1.healing()
“””出力は次の通りです。
    体力が300回復しました。
    現在の体力は400です。
“””
————————————————-
 
分かり易くコメントを廃しcodeだけ書いておきます。
 
class Charactor:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def show_data(self):
        pass
        #print(f’My name is {self.name} and {self.age} years old, {self.sex}.’)

chara1 = Charactor(‘Bear’, 25, ‘Male’)
chara1.show_data()# 表示はこうなる —> My name is Bear and 25 years old, Male.

class Hero(Charactor):
    def __init__(self, name, age, sex, hp, exp, mj):
        super().__init__(name, age, sex)
        self.hp = hp
        self.exp = exp
        self.mj = mj

    def healing(self):
        self.hp += self.mj
        print(f’体力が{self.mj}回復しました。’)
        print(f’現在の体力は{self.hp}です。’)

hero1 = Hero(‘マジンガー’, 80, ‘male’, 100, 200, 300)
hero1.healing()

“””
体力が300回復しました。
現在の体力は400です。
“””
————————————————-
 
これでクラス Charactor例は終わりです。 これだけで理解は難しいので、続けて別項で例をアップします。
 
 
Python別館
Python別館 目次

・Pythonで作成したアプリ関連の記事は「Python別館」に、・widgetやその使用方法・それ …

Python別館
脳トレの勧め 2/2

前回は、辞書に三つの要素を入れる術が分からなかったので、策を弄して取敢えずは動くように出来ました。で …

Python別館
脳トレの勧め 1/2

朝一番で頭の体操と称して英単語のクイズをやっております(ここです)。ここで間違えたものや、大事そうな …