クラスを作る


概要


クラスを作って関数(メソッド)を作る

class クラス名:
    def 関数名(引数):
        関数の中身

        
class aClass():
    def aClassFunc1(self,man03):
        print(man03)

ob1 = aClass()
ob1.aClassFunc1('Mike')
        
      
        
aCalssというクラスを以下に定義
    aClassFuncという関数を以下に定義(引数はman03)
        man03を出力せよ

ob1にクラスaClassのインスタンスを作成
ob1の関数aClassFuncを引数Mikeで実行せよ
        
      

print出力

        
Mike
        
      

説明


関数を入れた必要最低限のクラス構成がこれ
pythonではクラス関数の第1引数にselfを入れなければならない
よく忘れるので注意

インスタンスに引数を入れるとき
第1引数はselfに相当するのではなく
2番目のman03に相当するので注意

クラス内に定義された変数はプロパティともいう
クラス内に定義された関数はメソッドともいう

クラス定義のクラス名は()をつけてもつけなくてもいい

class aClass():

でも

class aClass:

でもいい。ただし呼び出すときは

ob1 = aClass()

のように()をつけないといけない
  

間違えやすい問題



  

概要


クラスを作る。クラスの中に変数(プロパティ)を作る

class クラス名:
    def __init__(引数):
        変数を定義

        
class aClass():
    def __init__(self,man01,man02):
        self.man01 = man01
        self.man02 = man02

ob1 = aClass('Bob','Ken')
print(ob1.man01)
print(ob1.man02)
        
      
        
aCalssというクラスを以下に定義
    コンストラクタ(初期値)を定義(引数はman01,man02)
        変数man01にBobを入れる
        変数man02にKenを入れる

ob1にクラスaClassのインスタンスを初期値Bob,Kenで作成
インスタンスob1のman01の値を出せ
インスタンスob1のman02の値を出せ
        
      

print出力

        
Bob
Ken
        
      

説明


変数を入れた必要最低限のクラス構成がこれ
pythonではコンストラクタ(初期値設定)の第1引数にselfを入れなければならない
よく忘れるので注意

インスタンス内で変数にアクセスするには
self.man01
のようにselfをつけなければならないので注意
クラス内に定義された変数はプロパティともいう クラス内に定義された関数はメソッドともいう

間違えやすい問題


クラス定義の中の
self.man01 = man01
で、変数名は別名でもよく、たとえば
self.aaa = man01
のようにしてもかまわない。 この場合インスタンスを作ったら当然
ob01.aaa
のようにして値を引き出す しかし変数名がクラス内定義とインスタンスで違うとわかりにくいので 普通は同じ名前にする

概要


クラスを作る。クラスの中に変数(プロパティ)と関数(メソッド)を作る

class クラス名:
    def __init__(引数):
        変数を定義
    def 関数名(引数):
        関数の中身

        
class aClass():
    def __init__(self,man01,man02):
        self.man01 = man01
        self.man02 = man02
    def aClassFunc1(self,man03):
        print(self.man01 + self.man02 + man03)

ob1 = aClass('Bob','Ken')
print(ob1.man01)
print(ob1.man02)
ob1.aClassFunc1('Mike')
        
      
        
aCalssというクラスを以下に定義
    コンストラクタ(初期値)を定義(引数はman01,man02)
        変数man01にBobを入れる
        変数man02にKenを入れる
    aClassFuncという関数を以下に定義(引数はman03)
        man01,man02,man03を出力せよ

aClassのインスタンスob1を作成、引数はBob,Ken
ob01の変数man01を出せ
ob01の変数man02を出せ
ob01の関数aClassFuncを実行せよ、引数はMike
        
      

print出力

        
Bob
Ken
BobKenMike
        
      

説明


変数(プロパティ)と関数(メソッド)を入れた
一般的なクラス構成がこれ

クラスとただの関数の比較だが
引数を入れて関数を実行するところまでは同じ

クラスは継承というのが可能で
一つの関数を少し変化させて別の関数をすぐに作ることができる
そしてそれらをわかりやすくまとめておける

もし関数だけで同じことをやろうとすると
関数をそのままコピーして中身を書き換えるということを
何度もやらなければならない

するとコード量が非常に大きくなり読むのに時間がかかり
自分でもどこをどれだけいじったかわからなくなってしまう

似たような長い関数を5も10も作ってしまうと
どれが最新かとかどれがどの機能を持つなどわかりにくく
とても大変な作業になる
クラスの継承を使うとこれらをわかりやすくまとめられる

関数の継承つまり
元の関数を少し変化させたものを使ったりということをしなければ
クラスを作る必要はなく
関数のみにした方がむしろシンプルで見やすい

なんでもクラスにする必要はない
  

間違えやすい問題