コンストラクターの外でアトリビュートを宣言した場合のそれの扱いについて


Python3において、アトリビュートを宣言する場所が、コンストラクター(`__init__`メソッド)の外と中で、どのような違いが生まれるか。それに関するPythonのドキュメントの所在をご教示願います。

[code]

    class Something:
        a = "<-このアトリビュートと、"
    
        def __init__(self):
            self.b = "<-このアトリビュートの扱いの違い。"
    
[/code]




一例ですが、下記コードですと

[code]

    class Something:
        a = "<-このアトリビュートと、"
    
        def __init__(self):
            self.b = "<-このアトリビュートの扱いの違い。"
            
    print(Something.a)
    print(Something.b)
            
    sample = Something()
    print(sample.a)
    print(sample.b)
    
[/code]

`print(Something.b)`のところでエラー(AttributeError: type object 'Something' has no
attribute 'b')になります。その前の行の`print(Something.a)`では「<-このアトリビュートと、」が出力されます。  
Somethingクラスの`b`にはインスタンスを作成しないとアクセスできませんでしたが、`a`にはインスタンスを作成しなくてもアクセスできました。

kunifさんがコメントに書かれたリンクを読まれたり、色々とご自身で試行されると理解が深まるのではないでしょうか。




一例ですが、下記コードですと

[code]

    class Something:
        a = "<-このアトリビュートと、"
    
        def __init__(self):
            self.b = "<-このアトリビュートの扱いの違い。"
            
    print(Something.a)
    print(Something.b)
            
    sample = Something()
    print(sample.a)
    print(sample.b)
    
[/code]

`print(Something.b)`のところでエラー(AttributeError: type object 'Something' has no
attribute 'b')になります。その前の行の`print(Something.a)`では「<-このアトリビュートと、」が出力されます。  
Somethingクラスの`b`にはインスタンスを作成しないとアクセスできませんでしたが、`a`にはインスタンスを作成しなくてもアクセスできました。

kunifさんがコメントに書かれたリンクを読まれたり、色々とご自身で試行されると理解が深まるのではないでしょうか。

