タートルグラフィックスでクラス変数に触れてみよう

クラス変数というのは、クラスの定義内でメソッドの外で定義する変数を指します。

この説明だけでは難しいので、四角の描写のクラスを作成しながら見ていきます。


四角描写用のクラスのファイルをsquare_drawer.pyにして、コードは下記のようにします。

import turtle


class SquareDrawer:

␣␣␣␣# 四角の大きさのクラス変数
␣␣␣␣square_size = 50

␣␣␣␣# 四角を描く
␣␣␣␣def draw(self):
␣␣␣␣␣␣␣␣for i in range(4):
␣␣␣␣␣␣␣␣␣␣␣␣turtle.forward(self.square_size)
␣␣␣␣␣␣␣␣␣␣␣␣turtle.left(90)

␣␣␣␣# 四角の大きさを設定する
␣␣␣␣def set_size(self, s):
␣␣␣␣␣␣␣␣self.square_size = s

␣␣␣␣def done(self):
␣␣␣␣␣␣␣␣turtle.done()

※␣は半角スペース1個分


上記のコードでクラス変数に該当するのは、

square_size = 50

のsquare_sizeになります。


このクラス変数を使う方法は、同一クラス内であれば、

self.square_size

で値の参照や代入ができるようになります。




クラス変数を踏まえた使用例を見ていきます。

square_drawer.pyの末尾に下記のコードを追加します。

if __name__ == "__main__":
␣␣␣␣turtle.shape("turtle")
␣␣␣␣d = SquareDrawer()
␣␣␣␣for i in range(6):
␣␣␣␣␣␣␣␣d.set_size(25 * i)
␣␣␣␣␣␣␣␣d.draw()
␣␣␣␣d.done()

※␣は半角スペース1個分


d.set_size(25 * i)/pre>
でクラス変数の値を変更できるメソッドを呼び出し、
def set_size(self, s):
␣␣␣␣self.square_size = s

※␣は半角スペース1個分

SquareDrawer内のクラス変数のsquare_sizeの値を変更した後に、次の行でその値を使って四角を描きます。

d.set_size(25 * i)

の箇所は

d.square_size = (25 * i)

のようにオブジェクトからクラス変数を直接呼び出して値を変更するといった事も可能です。


前者のset_sizeのメソッドを利用した方が、メソッド名で可読性を上げる事ができるのでおすすめです。


実行結果は



のようになります。

同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。