忍者ブログ
日々の研究生活のメモ書きなど
クラスについてまとめるつもりだったけど、↓の記事のが詳しいから困ったらそっちを読むよろし(未来の自分へ)

■ 参考 : Python クラスについて





■ クラス
クラスは組み込み型のint型やlist型と同じように独自の属性やメソッドを備えたデータ型を作成できる
クラス作成はclass文で始める
class クラス名 :
 def メソッド名(self, ・・・):
  ・・・
 def メソッド名(seld, ・・・):
  ・・・


classを定義した後に呼び出すと、クラスのインスタンスが作成される
class hoge_class:  # クラスの定義
 ・・・
hoge_instance = hoge_class()



■ メソッド
class文に続いて、1段階インデントしたブロックにメソッドを記述する
メソッドは関数と同じように、defから始める
メソッドがない内容が空のクラスにはpassとだけ書いておく
関数定義と同じように、class文の直後にドキュメンテーション文字列を記述できる
class hoge_class:  # クラスの定義
 """
 ここにドキュメントを書く
 """
 def foo(self, AAA, BBB):
 """ プリントするだけ """
  print(self, AAA, BBB)

メソッドは必ず引数を1つ以上取る
最初の引数にはクラスのインスタンスを指定する

obj=hoge()
obj.foo("aaa", "bbb")
のように使う
selfの部分がないような気がするけど、まだよくわかっていない




■ 属性
クラスのインスタンスに属性値を割り当てたいときは、事前に定義の必要はない
オブジェクト obj に属性を設定する場合は、 .演算子で属性名を指定する
obj=hoge()
obj.bar = 100
# objの属性barに100を設定する

print( obj.bar )
# 参照するときも同様にする


del文で属性を削除できる
del obj.bar



■ __new__()メソッド、__init__() メソッド
obj = hoge()
のようにクラスオブジェクトを呼び出すと、まず __new__()メソッドが呼び出される
その後、__init__()メソッドが呼び出されて、インスタンスを初期化する
__init__()メソッドはコンストラクタとも呼ばれるメソッドで主にインスタンスの属性値の初期化処理をする

class hoge_class:  # クラスの定義
 """
 ここにドキュメントを書く
 """
 def __init__(self, AAA, BBB):
 """ 属性値の初期値を設定する"""
  self.AAA = AAA
  self.BBB = BBB

obj = hoge(AAA=1, BBB=2)
# hoge.__init__(1, 2) が呼び出される


__init__メソッドは返り値を返さない


他にも__del__()メソッドがある
これはもう使わないインスタンスを解放されるときに、呼び出される
インスタンスが管理していたリソースの開放を行うため

__del__()の使用は計画的に、と本には書いてある
使用はしないほうがいいらしい、メモリーリークの可能性が高まるとか



■ 継承
あるクラス Aを定義する
別のクラスBで クラスAを引数に取ると、クラスBの中でクラスAのメソッドを呼び出して使うことができる
このとき、super()を使う


■ 多重継承
クラスCとクラスDを宣言する
クラスEの引数にクラスCとDを取ると、クラスEの中でクラスCとDのメソッドが使える
このとき引数は
class hoge(C, D):
のようにカンマで区切る



■ プライベートメンバ
名前が__(アンダーバー2個以上)で始まり、かつ末尾に__が2個以上つかない場合はプライベートメンバになる
プライベートメンバの例
__hoge
__hoge_
プライベートメンバじゃない例
_hoge
__hoge__

プライベートメンバはクラスの中では参照できるが、クラスの外からは参照することができない





■ デコレータ
「関数を引数にとって、戻り値として関数を返す」関数をデコレータと呼ぶ
def print_deco(func):
 print(func)
 return func

def hoge():
 print("python is GOD")

ref_func = print_deco(hoge)

ref_func()
# これを実行すると "python is GOD" と表示される

関数を定義するdef文の直前に@記号をつけてデコレータ関数を指定ry

もしデコレータ(@記号)について詳しく知る必要ができたら以下に目を通してちょんまげ(未来の自分へ)
■ 参考 : Pythonのデコレータについて

デコレーターを利用することで、既存関数の処理の前後に自分自身で、処理を付け加えることができます
ということらしい


ちなみにデコレータは複数指定できる
@hoge1
@hoge2
@hoge3
def foo():
 pass


def foo():
 pass

AAA = hoge1( hoge2( hoge3( foo ) ))
と同じらしい







■ ファイル入出力

まぁ必要ならそのうち書く











PR
この記事にコメントする
Name
Title
Color
E-Mail
URL
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#define WISH_LIST
amazonのほしい物リスト
#endif


int main(void){

printf("\n");
printf("あけましておめでとうございます\n");
printf("今年もどうぞよろしくお願いします\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中\\
少し追記しました\n");
/* 最終更新 2018/01/01 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

とある物理の院生日誌~院生は社会へ旅立った~
(研究室の先輩の個人ブログ)

英語例文を見て自然に英語・英会話を学ぶ
(楠本慶ニさんの個人ページ、様々な情報の密度の高さに感動)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]