演習課題「クラスメソッドを呼び出そう」
右のコードには、Greetingクラスに、say_helloメソッドが定義してあります。
このメソッドをクラスメソッドとして呼び出してください。
プログラムを実行して、正しく出力されれば演習課題クリアです!
期待する出力値
hello paiza
演習課題「間違い探し」
右のコードには、Greetingクラスのsay_helloメソッドを、クラスメソッドとして呼び出していますが、エラーになってしまいます。
間違いを修正して、「hello paiza」と表示されるようにしてください。
プログラムを実行して、正しく出力されれば演習課題クリアです!
期待する出力値
hello paiza
#07:クラス変数とクラスメソッド
ここでは、Pythonのクラス変数とクラスメソッドを使います。クラス変数とクラスメソッドは、オブジェクトで共通して利用できる変数です。
Player.charactor_count = Player.charactor_count + 1
を、省略する記法です。「-=」「/=」なども使用できます。
オブジェクト間で共通して利用できる変数のこと。
オブジェクト間で共通して利用できるメソッドのこと。
動画では、2つの方法でクラスメソッドを作成しましたが、デコレータを使用する方法が推奨されています。
クラスメソッド | Python-izm
https://www.python-izm.com/advanced/class_method/
すでに定義されている関数に、新たに機能を追加できる仕組みのこと。
デコレータは、すでに用意されていたり、自分で作成したりすることができます。
動画では、@classmethodを使用しました。@classmethod
def summary(cls):
print(str(Player.__charactor_count) + "人で、スライムを攻撃した。")def summary(cls):
print(str(Player.__charactor_count) + "人で、スライムを攻撃した。")
summary = classmethod(summary)
上の2つのコードは、同じ処理をします。
Pythonのデコレータの使い方 - Life with Python
https://www.lifewithpython.com/2014/12/python-decorator-syntax.html
Pythonのデコレータについて
https://qiita.com/mtb_beta/items/d257519b018b8cd0cc2e
class Player:
__charactor_count = 0
@classmethod
def summary(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__("魔法使い")
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()
クラス — Python 3.6.5 ドキュメント
https://docs.python.jp/3/tutorial/classes.html
Python のクラス変数とインスタンス変数って何?
http://nihaoshijie.hatenadiary.jp/entry/2018/01/15/225346