クラス変数とは
クラス変数とは、すべてのインスタンス間で共通した値をもつ変数です。
クラス変数は、クラス内に定義することで作成できます。
インスタンス変数は、個々のインスタンスに格納される変数のことです
class User:
# 実行順
def __init__(self, name): # インスタンス化されて渡ってくる値を受ける変数を定義します
# インスタンス変数(属性の初期化)
self.name = name
print("コンストラクタが呼ばれました")
def hello(self):
print("Hello " + self.name)
user = User("Sample User") # userというインスタンスを生成しています。
今回定義したUserクラスのコンストラクタはnameという引数を取り、
その引数で変数であるself.name(この変数のことをインスタンス変数と呼びます)を初期化しています。
インスタンス変数は、個々のインスタンスに格納される変数のことですので、ここでは5行目のnameがインスタンス変数です。
8行目に定義したhelloメソッド内9行目で、selfの後ろに属性名nameを書いていますが、
このように.インスタンス変数名と書くことで、インスタンス変数の作成及びアクセスができます
コンストラクタ(英:constructor)とは
オブジェクト指向のプログラミング言語で登場する用語のひとつであり
インスタンスを作ったタイミングで実行されるメソッドのことです。
つまり クラスをnewした瞬間に実行される関数のことです。
インスタンス変数にアクセスする
インスタンス変数にアクセスするには、インスタンス名.インスタンス変数と記述します。
user = User("Sample User")
py = User("python")
user.hello() # Hello Sample User
py.hello() # Hello python
自作のクラスを定義するソースコードを記述します
以下のソースコードでは
python クラス変数を利用し csvデータを読み込む outputフォルダを作成する
事を実施しております
class my_directory_p:
def __init__(self,pass_out): # インスタンス化されて渡ってくる値を受ける変数を定義します
# インスタンス変数(属性の初期化)
self.pass_out = pass_out
#コンストラクタが呼ばれる(クラスをnewした瞬間に実行される関数が呼ばれる)
def pass_o(self):# pass_o メソッドを定義する
return self.pass_out #定義したメソッドpass_oを利用するとpass_outの値がreturnでかえってくる
def pass_out_new(self): # pass_out_new メソッドを定義する
# Create the folder "output" if it does not exist.
# pass_out_new メソッド を使うと output "フォルダが存在しない場合、作成します。
data_dir = self.pass_out
if not os.path.exists(data_dir):
os.mkdir(data_dir)
# 定義したメソッドpass_oを利用し 最初に作ったインスタンスの文字列をreturnする
print(u.pass_o()+"I created a folder!")
def imp_data(self):# imp_data メソッドを定義する
# imp_data メソッドを使用すると /data/ フォルダのQ_ktvRatio_tccl202101.csv というCSVを読み込む
image_file_path = './data/Q_ktvRatio_tccl202101.csv'
# "Shift-JIS" を pandas として
with codecs.open(image_file_path, "r", "Shift-JIS", "ignore") as file:
df_md = pd.read_table(file, delimiter=",")
return df_md
#define the value of self here
#ここでselfの値を定義する
u = my_directory_p("./output/")
# pass_out_new メソッド を以下で使うと output "フォルダが存在しない場合、作成します。
u.pass_out_new()
# imp_data メソッドを使用すると /data/ フォルダのQ_ktvRatio_tccl202101.csv というCSVを読み込む
df_r=u.imp_data()
もしエクセルデータを直接読みこみたい場合 以下のようにします
定義する メソッドを増やすと便利です
class my_directory_p:
def __init__(self,pass_out): # インスタンス化されて渡ってくる値を受ける変数を定義します
# インスタンス変数(属性の初期化)
self.pass_out = pass_out
#コンストラクタが呼ばれる(クラスをnewした瞬間に実行される関数が呼ばれる)
def pass_o(self):# pass_o メソッドを定義する
return self.pass_out #定義したメソッドpass_oを利用するとpass_outの値がreturnでかえってくる
def pass_out_new(self): # pass_out_new メソッドを定義する
# Create the folder "output" if it does not exist.
# pass_out_new メソッド を使うと output "フォルダが存在しない場合、作成します。
data_dir = self.pass_out
if not os.path.exists(data_dir):
os.mkdir(data_dir)
# 定義したメソッドpass_oを利用し 最初に作ったインスタンスの文字列をreturnする
print(u.pass_o()+"I created a folder!")
def imp_data(self):# imp_data メソッドを定義する
# imp_data メソッドを使用すると /data/ フォルダのQ_ktvRatio_tccl202101.csv というCSVを読み込む
image_file_path = './data/Q_ktvRatio_tccl202101_2.csv'# "Shift-JIS" を pandas として
with codecs.open(image_file_path, "r", "Shift-JIS", "ignore") as file:
df_md = pd.read_table(file, delimiter=",")
return df_md
def read_excel_data(self):#read_excel_data メソッドを定義する
#read_excel_data メソッドを使用すると /data/ フォルダのQ_ktvRatio_tccl202101_2.xlsx というxlsxを読み込む
image_file_path_excel = './data/Q_ktvRatio_tccl202101_2.xlsx'
df = pd.read_excel(image_file_path_excel)
return df
#define the value of self here
#ここでselfの値を定義する
u = my_directory_p("./output/")
# pass_out_new メソッド を以下で使うと output "フォルダが存在しない場合、作成します。
u.pass_out_new()
# imp_data メソッドを使用すると /data/ フォルダのQ_ktvRatio_tccl202101.csv というCSVを読み込む
#df_r=u.imp_data()
#read_excel_data メソッドを使用すると /data/ フォルダのQ_ktvRatio_tccl202101_2.xlsx というxlsxを読み込む
df_r=u.read_excel_data()