class aClass():
def Func1(self,file):
self.file = file
print(self.file)
def Func2(self,file):
print(self.file)
ob01 = aClass()
file = '01.txt'
ob01.Func1(file)
file = '02.txt'
ob01.Func2(file)
###########################
class bClass():
def Func1(self,file):
print(file)
def Func2(self,file):
print(file)
ob02 = bClass()
file = '03.txt'
ob02.Func1(file)
file = '04.txt'
ob02.Func2(file)
aClassというクラスを定義
Func1という関数を定義(引数はfile)
self.fileという変数にfileを入れる
self.fileを出力せよ
Func2という関数を定義(引数はfile)
self.fileを出力せよ
クラスaClassのob01というインスタンスを定義
fileという変数に「01.txt」という文字列を入れる
ob01のFunc1を引数fileで実行
fileという変数に「02.txt」という文字列を入れる
ob01のFunc2を引数fileで実行
bClassというクラスを定義
Func1という関数を定義(引数はfile)
fileを出力せよ
Func2という関数を定義(引数はfile)
fileを出力せよ
クラスbClassのob02というインスタンスを定義
fileという変数に「03.txt」という文字列を入れる
ob02のFunc1を引数fileで実行
fileという変数に「04.txt」という文字列を入れる
ob02のFunc2を引数fileで実行
##################で分けた上のほう(aClass)のFunc1では
変数にselfをつけて定義している
##################で分けた下のほう(bClass)のFunc1では
変数にselfなしで定義している
aClassではFunc1でself.fileが定義されているので
インスタンスob01.Func1(file)を定義したときに
self.fileに01.txtが入っている
ob01.Func2(file)をしたときにself.fileを出力したので
01.txtが出てしまっている
Func1で定義したものがFunc2で出ているのだが
このように複数の関数の引数で同じもの(file)を使ってしまうと
self.fileがどこの関数で定義されたものかわからず
混乱して使いづらい
下のbClassではself.fileを使っておらずfileしか使っていないので
file変数はほかの関数には干渉せず
ob02.Func1(file)では直前に入れた03.txtが
ob02.Func2(file)では直前に入れた04.txtが
そのまま出てくるのでわかりやすい
したがって、必要がない限りは
クラスの関数定義中にself.変数は使わないほうがよく
self.変数はできるだけコンストラクタ中のみで定義したほうが
混乱しなくてわかりやすい