93600


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

[code]

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


CC BY-SA 4.0
2023-01-29T00:48:28.280
93599
2023-01-29T07:30:57.757
2023-01-29T03:01:10.763
41059
41059
question
python class
コンストラクターの外でアトリビュートを宣言した場合のそれの扱いについて


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

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


CC BY-SA 4.0
2023-01-29T02:25:03.110
93600
2023-01-29T07:30:57.757
2023-01-29T07:30:57.757
39819
39819
93599
answer


[kunif](https://ja.stackoverflow.com/users/26370/kunif)さんのコメントにある、[Python公式ドキュメント](https://docs.python.org/ja/3/tutorial/classes.html)の中で、[今回の質問の答えにあたる記述](https://docs.python.org/ja/3/tutorial/classes.html#class-
and-instance-variables)を見つけられることができました。ご回答いただいた皆様、ありがとうございました。


CC BY-SA 4.0
2023-01-29T03:08:10.793
93601
2023-01-29T03:08:10.793
41059
93599
answer