Python-クラスのインスタンス
インスタンス
数値123というオブジェクトは、intクラスのインスタンスです。”abc”という文字列オブジェクトは、strクラスのインスタンスです。
リテラル
Pythonでは、すべてのオブジェクトはなんらかのクラスのインスタンスです。数値や文字のように、プログラム言語で特別な書き方が用意されてているものをリテラルと言います。
数値はただ数字を並べるだけで、intクラスのインスタンスとして扱われます。複数の文字の前後をクオートで囲むことでことで、strクラスのインスタンスとして扱われます。
どのような書き方がリテラルとして解釈されるかは、プログラム言語によってことなります。
クラスの定義
class[クラス名]: class Orange:
[スイート] def__init__(self):
print("Created!")
[クラス名]はクラスの名前、[スイート]はクラスのスイートです。
Pythonのクラス名は、常に大文字で始まるキャタクターケースで記述する。クラス名に複数の単語が含まれる場合、全ての単語の最初の文字はLikeThisのように大文字で書きます。
関数の命名規則ではアンダースコアで単語をつなぐが、クラスは適用しません。
クラスのスイート部
単純文、またはメソッド(複合文)。メソッドは関数に似ています。クラス内部で定義し、そのクラスから生成したオブジェトを通してのみ呼び出せます。マソッド名はすべて小文字で、アンダースコアで単語をつなぎます。関数とほとんど同じ構文で定義する
関数との違い1:クラスのスイート部分に定義する。2:引数をすくなくても一つ定義する必要がある。Pythonの習慣として、一つ目の必須な引数にはselfという名前を使います。
self変数は、インスタンス変数の定義に使います。
インスタンス変数
そのオブジェクトに属する変数のこと。いくつものオブジェクトを作ると,各オブジェクトはそれぞれ異なる属性値をインスタンス変数として持つことになります。
self.[変数名] = [値]
通常、インスタンス変数は__init__という特別なメソッドの中で定義して、オブジェクトを作るときにPythonから呼び出されます。
オレんジを表すクラスの例
class Orange:
def__init__(self, w, c):
self.weight = w
self.color = c
print("Created!")
Oregeオブジェクトを作成すると、__init__のコードが実行され、2つのインスタンス変数、weightとcolorが作成されます。クラス内のどのメソッドでも、これらのインスタンス変数を通常の変数と同様に使用できます。
Orangeオブジェクトを作成すると、__init__のコードに書かれたprint関数が呼び出されCreated!と出力されます。
__init__のように2重のアンダースコアで囲まれたメソッドは、特殊メソッドという。PYthonでオブジェクトの作成など特別な目的で使用するメソッドです。
クラスのインスタンス化
新しいオブジェクトを作ること
class Orange:
def__init__(self, w, c):
self.weight = w
self.color = c
print("Created!")
orl = Orange(10, "dark orange")
print(orl)
上記では、クラスを定義してから、Orange(10, "dark orange")でOrangeクラスをインスタンス化しています
インスタンス変数の値の取得
[オブジェクト名].[インスタンス変数名]
orl = Orange(10, "dark orange")
print(orl.weight)
print(orl.color)
インスタンス変数の値を変更するには
[オブジェクト名].[インスタンス変数] = [新しい値]
orl = Orange(10, "dark orange")
orl.weight = 100
orl.color = "light orange"
Orangeクラスをりようして複数のお蓮華オブジェクトを作ることもできます
orl = Orange(4, "light orange")
or2 = Orange(8, "dark orange")
or3 = Orange(14, "yellow")
Orangeオブジェクトに腐る性質を追加
class Orange:
def__init__(self, w, c):
"""weight(重さ)はグラム"""
self.weight = w
self.color = c
self.mold = 0
print("Created!")
def rot(self, days, temp):
"""tempは摂氏"""
self.mold = days * temp
orang = Orange(200, "orange")
print(orang.mold)
orange.rot(10,37)
print(orange.mold
オブジェクト指向の利点と欠点
利点:コードの再利用が促進されて、開発や保守にかかるトータル時間が短縮される、さらに解決したい問題を分解して扱うことが推奨されるため、保守しやすい
欠点:プログラムを書く前の計画や設計などに、多くの労力をかけることが必要