teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明の追加

2017/05/04 15:27

投稿

miyahan
miyahan

スコア3095

answer CHANGED
@@ -1,4 +1,4 @@
1
- いくつもの変数を複数の関数から扱う場合、クラスを使うことをおすすめします。
1
+ いくつもの変数を複数の関数から扱う場合、クラス(オブジェクト)を使うことをおすすめします。
2
2
  たとえばこんな感じです。
3
3
 
4
4
  ```python
@@ -58,7 +58,7 @@
58
58
  print(point.x, point.y)
59
59
  ```
60
60
 
61
- これは "Point" というクラスの中に、width, height, x, y といった変数(インスタンス変数)と、ポイントを移動させる関数(メソッド)セットで納められてます。
61
+ これは "Point" というクラスの中に、width, height, x, y といった変数(インスタンス変数)と、ポイントを移動させる関数(インスタンスメソッド)セットで納めてます。
62
62
 
63
63
  * グローバル変数: どこでも使える。それゆえに衝突などのトラブルの原因に...
64
64
  * ローカル変数: その関数内だけで使える。なのでほかの関数に引数としていちいち渡さないといけない
@@ -66,7 +66,7 @@
66
66
 
67
67
  と、インスタンス変数は「必要な範囲で使い回せる」というグローバル変数やローカル変数の間を取った絶妙な特性を持っています。
68
68
 
69
- またクラスを使うことで機能の拡張も簡単にできます。x,y を反転させるメソッドを追加するなら、こんなコードですみます。
69
+ またクラスを使うことで機能の拡張も簡単にできます。例えば、x,y を反転させるメソッドを追加するなら、こんなコードですみます。
70
70
 
71
71
  ```python
72
72
  def reverse_xy(self):
@@ -75,4 +75,20 @@
75
75
  self.limit_range()
76
76
  ```
77
77
 
78
+ また、もし複数のポイントを同時に扱わないといけなくなった場合、元のコードだと処理が非常に複雑になってしまいますが、クラスを使うことでデータを呼び出し元(main)で管理しなくてよいので簡単に実現できます。
79
+
80
+ ```python
81
+ point1 = Point(width=640, height=480, x=10, y=20)
82
+ point2 = Point(width=640, height=480, x=100, y=50)
83
+ point3 = Point(width=640, height=480, x=0, y=0)
84
+
85
+ point1.move_up(100)
86
+ point2.move_left(-10)
87
+ point3.move_down(50)
88
+
89
+ print(point1.x, point1.y)
90
+ print(point2.x, point2.y)
91
+ print(point3.x, point3.y)
92
+ ```
93
+
78
94
  とても便利ですので、ぜひ学習してみてください。

1

インスタンス変数についての説明の追加

2017/05/04 15:27

投稿

miyahan
miyahan

スコア3095

answer CHANGED
@@ -58,15 +58,15 @@
58
58
  print(point.x, point.y)
59
59
  ```
60
60
 
61
- これは "Point" というクラスの中に、width, height, x, y といった変数と、ポイントを移動させる関数(メソッド)がセットで納められてます。
61
+ これは "Point" というクラスの中に、width, height, x, y といった変数(インスタンス変数)と、ポイントを移動させる関数(メソッド)がセットで納められてます。
62
62
 
63
- クラスを使う次のようメリッがあります。
63
+ * グローバル変数: どこでも使える。それゆえに衝突どのラブルの原因に...
64
+ * ローカル変数: その関数内だけで使える。なのでほかの関数に引数としていちいち渡さないといけない
65
+ * インスタンス変数: そのクラス(インスタンス)内だけで使える。なので同クラス内の関数同士で共有できる。でもグローバルからは見えない
64
66
 
65
- * クラス内に変数を持たせているので、関数の引数が最小限で済む
66
- * クラ内に変数を持たせているので、呼び出し側で値管理し済む
67
+ と、インタンス変数は「必要な範囲で使回せ」というグローバル変数やローカル変数取った絶妙特性を持っいます。
67
- * 関数を追加して、機能拡張するのが簡単
68
68
 
69
- たとえば、x,y を反転させるメソッドを追加するなら、こんなコードですみます。
69
+ クラスを使うこで機能の拡張も簡単にできます。x,y を反転させるメソッドを追加するなら、こんなコードですみます。
70
70
 
71
71
  ```python
72
72
  def reverse_xy(self):