回答編集履歴

4

追記

2017/12/27 07:03

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -45,3 +45,37 @@
45
45
  例えばJavaのstaticフィールドのような用法です。
46
46
 
47
47
  便利な場面もありますが、挙動を追いづらくなるデメリットがあります。
48
+
49
+
50
+
51
+ ---
52
+
53
+ > また、このようにすでにクラス内の変数の初期値が決まっているときはinitを使わなくてもいいのですか?
54
+
55
+ (_init_(self, gpa=3)とする必要もないとき)
56
+
57
+
58
+
59
+ そのような場合、`__init__`を**自分で定義しなくてもかまいません。**
60
+
61
+ ただし、`__init__`が存在しないわけではありません。
62
+
63
+ ```Python
64
+
65
+ >>> class Hoge:
66
+
67
+ ... """中身が空っぽなクラスだよ"""
68
+
69
+ ... pass
70
+
71
+ ...
72
+
73
+ >>> dir(Hoge)
74
+
75
+ ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
76
+
77
+ >>> Hoge.__init__ is object.__init__
78
+
79
+ True
80
+
81
+ ```

3

成形

2017/12/27 07:03

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -32,6 +32,8 @@
32
32
 
33
33
 
34
34
 
35
+ ---
36
+
35
37
  基本的にはインスタンス変数を使い、次のようなときにクラス変数を使うと良いでしょう。
36
38
 
37
39
  - **定数的に変数を用いる場合**

2

追記

2017/12/27 06:58

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,6 +1,34 @@
1
1
  前者は**インスタンス変数**として、後者は**クラス変数**として値を管理します。
2
2
 
3
3
  [UX MILK - Pythonのクラス変数とインスタンス変数](http://uxmilk.jp/41600)
4
+
5
+
6
+
7
+ 簡単に言うと、クラス変数には`クラス名.変数名`でアクセスできます。
8
+
9
+ ```Python
10
+
11
+ class Hoge:
12
+
13
+ a = None
14
+
15
+
16
+
17
+ def __init__(self):
18
+
19
+ self.b = None
20
+
21
+
22
+
23
+ hoge = Hoge()
24
+
25
+ Hoge.a # ok
26
+
27
+ Hoge.b # ng
28
+
29
+ hoge.b # ok
30
+
31
+ ```
4
32
 
5
33
 
6
34
 

1

追記

2017/12/27 06:58

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,17 @@
1
1
  前者は**インスタンス変数**として、後者は**クラス変数**として値を管理します。
2
2
 
3
3
  [UX MILK - Pythonのクラス変数とインスタンス変数](http://uxmilk.jp/41600)
4
+
5
+
6
+
7
+ 基本的にはインスタンス変数を使い、次のようなときにクラス変数を使うと良いでしょう。
8
+
9
+ - **定数的に変数を用いる場合**
10
+
11
+ ただし、値を不用意に書き換えてしまわないように注意する必要があります。
12
+
13
+ - **どうしても各インスタンス共有の変数が欲しい場合**
14
+
15
+ 例えばJavaのstaticフィールドのような用法です。
16
+
17
+ 便利な場面もありますが、挙動を追いづらくなるデメリットがあります。