VOOZH about

URL: https://paiza.jp/works/python3/primer/beginner-python9/7406

⇱ Python入門編9:クラス変数とクラスメソッド | プログラミング学習サイト【paizaラーニング】


演習課題「クラスメソッドを呼び出そう」

右のコードには、Greetingクラスに、say_helloメソッドが定義してあります。
このメソッドをクラスメソッドとして呼び出してください。

プログラムを実行して、正しく出力されれば演習課題クリアです!

期待する出力値

hello paiza

演習課題「間違い探し」

右のコードには、Greetingクラスのsay_helloメソッドを、クラスメソッドとして呼び出していますが、エラーになってしまいます。
間違いを修正して、「hello paiza」と表示されるようにしてください。

プログラムを実行して、正しく出力されれば演習課題クリアです!

期待する出力値

hello paiza

※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