いーほろよいの技術ブログ

IT技術ブログになります。

PythonのClassにチャレンジしてみよう

はじめに

今回からPythonのクラスをやります。

因みに、ここに書かれている事を理解するにはオブジェクト指向が理解できている事を前提としているのですが、Pythonでは完璧なオブジェクト指向のプログラミングは実現できません!

それはドキュメントにも書いてあります。

アクセス権の指定(privateなど)が無いのです。

9. クラス — Python 3.6.1 ドキュメント9.6. プライベート変数を参照)

...ややこしいですね。

私もどう説明していいか分かりません。

正当なルートで勉強するなら"オブジェクト指向Pythonのクラス"だと思います。 

そのため、最初に書いたようにオブジェクト指向が理解できている事が前提としております。 

 

ちょっとだけオブジェクト指向について

先ほどから"オブジェクト指向"と書いていますが、オブジェクト指向概念になります。

そしてクラスはその概念に沿って組み立てる設計図になります。(間違っていたら指摘お願いします。)

 

クラスのアレコレ

クラスをプログラムで記述する時、"class"という予約語があります。

このclassでクラス定義を宣言します。

また、クラスは初期化(initialize)、メンバ変数(プロパティ変数)、メソッドという用語が頻繁に登場します。(下記で簡単な説明します。 )

 

兎に角書いてみる

説明ばかりだと疲れるので、とりあえずプログラムをGitHubにアップしてあるので確認お願いします。

github.com

↓こんなソースになっています。

#
# Sample
#
class Member:
    def __init__(self, name=''):
        """ Initialize the Member class.
        """
        self.name = name

    def get_property(self, value_name):
        """ Get properties of this class.
        """
        return getattr(self, value_name, 'non name')

    def set_property(self, value_name, value):
        """ Set properties of this class.
        """
        setattr(self, value_name, value)

    def bad_arguments(self, value, values=[]):
        """ Bad argument initialization example.
        """
        values.append(value)
        self.bad_values = values

#
# How to handle classes.
# initialize
# getter and setter
member = Member('taro nihon')

# Get "name" property.
print(member.get_property('name'))

# Override "name" property.
member.set_property('name', 'hanako nihon')
print(member.get_property('name'))

# Create "country" property.
member.set_property('country', 'Japan')
print(member.get_property('country'))

# Notes on method arguments.
member.bad_arguments(1)
member.bad_arguments(2)
member.bad_arguments(3)
print(member.bad_values)

 

上記のclass Memberが"Memberクラス"になります。

その中でdefと宣言されている関数がメソッドといいます。

また、"__init__"と名前が付いたメソッドが有りますが、これはクラスを初期化(initialize)する時に呼ばれます。

その中で宣言されているself.nameが"Memberクラスのnameプロパティ変数(メンバ変数)"といいます。

 

実体化(初期化)

クラスはあくまで設計図です。

実際に設計図から実体化するのが、"member = Member('taro nihon')"になります。

この時、ローカル変数memberにMemberクラスが実体化(初期化)され代入されます。

 

すごい中途半端ですが、この辺で今日は終わりたいと思います。

なぜなら疲れたから。

それに新しい事ばかりで理解するのに疲れると思うので。

次回は引き続きサンプルを使用してクラスのメソッドについて説明したいと思います。

 

最後まで読んでいただきありがとうございます。