Index ソフト・ハード Python | クラス |
インスタンス生成 クラス変数 インスタンス変数 特殊メソッド メソッドのタイプ メソッドの定義 クラスの定義 インスタンス self クラス サンプル 型 コードブロック 変数 機能・要件 タスク ライブラリ 導入 Sample Error 基礎他 |
インスタンスの生成 ・クラスをもとにインスタンスを生成(クラスのインスタンス化) 定義したクラスのクラス名を指定してインスタンス化 生成されたインスタンスは変数に代入して扱う。クラス変数の定義 ・クラスの属性(特徴や特性)を保持するために、クラス内にクラス変数を定義 ・クラス変数はそのクラスのすべてのインスタンスによって共有 ・クラス変数はclassブロック直下でクラス変数名に初期値を代入して生成 インスタンス変数はインスタンス毎に異なる値を保持することができる。インスタンス変数の定義 ・インスタンスの属性(特徴や特性)保持のためにクラス内にインスタンス変数を定義 ・__init__メソッド内でself.インスタンス変数名に初期値を代入して生成( サンプル) 特殊メソッド ・コンストラクタ クラスをインスタンス化するときの処理を定義 メソッド名を__init__として定義 コンストラクタは戻り値を返すことができない。 インスタンス化の際に引数を与えることでコンストラクタに引数を与えられる。・デストラクタ インスタンスが不要になり削除される時に呼ばれるメソッド・callメソッド インスタンスを関数のように呼び出す・newメソッド インスタンス生成時に「必ず」呼ばれる。メソッドのタイプ ・インスタンスメソッド ・クラスメソッド インスタンス化することなく使うことができる。 定義するときはメソッドの定義の直前に@classmethodデコレータを記述 クラスメソッドは第1引数でクラス自体を引数として受け取る。 第1引数は慣習的にclsを使用 クラスメソッドを呼び出すときは クラス名.クラスメソッド名() の形で呼び出す。・静的メソッド 定義するときはメソッドの定義の直前に@staticmethodデコレータを記述 静的メソッドは第1引数でselfやclsを取らない。 静的メソッドを呼び出すときは クラス名.静的メソッド名() の形で呼び出す。 単に関数をクラスという枠組みに格納しただけ。メソッドの定義 ・メソッドは1つ以上の引数を持つ。 ・引数のうち最初のものはselfという名前にする。 クラスの定義 ・classキーワードを使ってクラスを定義 ・クラス名は慣習的に、1文字目を大文字2文字目以降を小文字 複数の単語から形成される場合は単語の1文字目を大文字・派生クラスの定義 派生クラスはクラス定義の括弧内に基底クラスを指定して定義 派生クラスは基底クラス定義との差分だけを記述 派生クラスの派生クラスの定義が出来る。インスタンス ・クラスをもとに生成された実体(オブジェクト) ・クラスをもとにオブジェクトを生成することを「インスタンス化」 クラス ・クラスはオブジェクトの設計書(定義)、雛型 ・クラスには、属性と操作を定義 ・属性 クラスをもとに生成された実体(オブジェクト)の特徴や特性を表す。 Pythonではインスタンス変数やクラス変数として定義・操作 クラスをもとに生成された実体(オブジェクト)の機能や働きを表す。 Pythonではメソッドとして定義・self インスタンス自身を示す。(慣例として「self」を使用) インスタンス生成時に、引数をselfを使ってインスタンス変数として代入サンプル
>>>class Test:
>>> pass # 中身のないTestクラス
>>>x = Test() # インスタンスを生成
>>> class Test:
... x = "変数1"
... def test_method1(self):
... print(self.x)
... def test_method2(self, arg1):
... print("引数1:" + arg1)
...
>>> test = Test()
>>> test.test_method1()
変数1
>>> test.test_method2("引数Test")
引数1:引数Test
>>> class Test:
... def __init__(self, name): # コンストラクタ
... self.name = name
... def __call__(self): # callメソッド
... print('My name is ' + self.name + '.')
... def __del__(self): # デストラクタ
... pass
...
>>> hoge = Test('hoge') # インスタンスを生成
>>> hoge() # callメソッド実行
My name is hoge.
>>> del hoge # インスタンスを削除
>>>
型 ・変数や関数で型を明示しない。(型はある。(動的型付け)) 参考 全ていずれかのクラスに属する。・意図しない型が実行時に渡された場合は、実行時に例外が発生
>>> type("str")
<class 'str'>
>>> type(True)
<class 'bool'>
>>> type(10)
<class 'int'>
・オーバロード オーバロードはできない。 同名関数が多重に定義された場合、後ろが有効になる。コードブロック ・インデントで表す。({}ではない。ブロック:{} で括られた、処理上のひとまとまり) インデント数は何個でもよい。変数 ・型宣言はしない。(単に変数名を定義する。) 動的型付けをする。・プライベート変数はない。 「_」をプライベート相当として扱う慣習 |
All Rights Reserved. Copyright (C) ITCL |