  
  
素人考えかもしれませんが、いまいち初期化メソッドの必要性について理解できません。ものの本などを読んでも、いまいち最初にクラスに定義されるメソッドや変数、というだけで納得感がないです。

例えば、以下の２つのクラスがあるとします。  
この２つのクラスは同じ動きをするように思えるのですが、ここで初期化メソッドの中で変数を定義する場合と、初期化メソッドの外で変数を定義する場合の違いは何でしょうか？ご教示賜れますと幸いです。

[code]

    class test1:
        x = 5
        
        def func1(self):
            self.x = self.x + 1
            print(self.x)
    
    class test2:
        def __init__ (self):
            self.x = 5
        
        def func2(self):
            self.x = self.x + 1
            print(self.x)
    
[/code]


CC BY-SA 4.0
2021-05-13T08:58:53.977
75817
2021-05-13T10:49:58.097
2021-05-13T09:21:50.513
3060
35514
question
python
pythonのクラスにおける初期化メソッドの必要性


「初期化メソッドでの処理か否か」のことを質問していますが、「クラス変数」と「インスタンス変数」の違いと混合されているようです。

そしてどうも、質問のようなプログラムは作成出来て動作してしまうけれども、実は非推奨らしいですね。  
この辺の記事が参考になるでしょう。  
[Pythonのクラスにおけるインスタンス変数とクラス変数の挙動の覚書](http://73spica.hatenablog.com/entry/2017/11/29/000132)  
[クラス変数にはどうアクセスすべき?](https://qiita.com/FGtatsuro/items/be22c520e62a1d100e09)  
[Pythonのクラス変数とインスタンス変数](https://uxmilk.jp/41600)

上記記事から以下が導き出されるでしょう。

  * クラス変数はインスタンスを作成しなくても存在してアクセス出来る 
    * class定義だけした状態で`print(test1.x)`が出来る
  * 同じ名前のクラス変数とインスタンス変数を作ると、それぞれ独立した別のものが存在する 
    * `t1 = test1()`とした時に`t1.x`と`test1.x`は別々のものである
    * 質問のソースで上記はインスタンス作成時には同じ値を返すが、`t1.func1()`実行後は`t1.x`は`6`になり、`test1.x`は`5`のまま
  * インスタンスを作成しても、クラス変数が無ければクラス変数としてのアクセスは出来ない 
    * `t2 = test2()`とした時でも、`print(t2.x)`は出来るが`print(test2.x)`は出来ない


CC BY-SA 4.0
2021-05-13T10:49:58.097
75820
2021-05-13T10:49:58.097
26370
75817
answer