回答編集履歴

2

super()であるべき

2019/09/14 12:00

投稿

quickquip
quickquip

スコア11029

test CHANGED
@@ -141,3 +141,37 @@
141
141
  ```
142
142
 
143
143
  これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。
144
+
145
+
146
+
147
+ ----
148
+
149
+
150
+
151
+ ところで、Python3ではこう書くべきです。
152
+
153
+
154
+
155
+ ```python
156
+
157
+ class GameBoard(tk.Canvas):
158
+
159
+ def __init__(self,app):
160
+
161
+ super().__init__(self,app)
162
+
163
+ ```
164
+
165
+
166
+
167
+ Python公式ドキュメントの
168
+
169
+ [super()の説明](https://docs.python.org/ja/3/library/functions.html#super)
170
+
171
+ [3.0のWhat's New](https://docs.python.org/ja/3/whatsnew/3.0.html#builtins)
172
+
173
+ [多重継承の項](https://docs.python.org/ja/3/tutorial/classes.html#multiple-inheritance)
174
+
175
+ を参考に。
176
+
177
+ プログラマが"自分でこれが上位だと思っている"クラス名をハードコードするのはちょっとだけ危険です。

1

誤解がでないように GameBoard() の表記を GameBoard(...) に変更

2019/09/14 12:00

投稿

quickquip
quickquip

スコア11029

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
 
104
104
 
105
- これは動きます。`GameBoard.__init__`が定義されていないので、`GameBoard()`でGameBoardをインスタンス化すると`tk.Canvas.__init__`が動くからです。
105
+ これは動きます。`GameBoard.__init__`が定義されていないので、`GameBoard(...)`でGameBoardをインスタンス化すると`tk.Canvas.__init__`が動くからです。
106
106
 
107
107
 
108
108
 
@@ -122,7 +122,7 @@
122
122
 
123
123
 
124
124
 
125
- これは動きません。`GameBoard.__init__`が定義されているので、`GameBoard()`でGameBoardをインスタンス化すると`GameBoard.__init__`が動きますがその実装が空なので、`tk.Canvas.__init__`が**実行されることがない**からです。
125
+ これは動きません。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動きますがその実装が空なので、`tk.Canvas.__init__`が**実行されることがない**からです。
126
126
 
127
127
 
128
128
 
@@ -140,4 +140,4 @@
140
140
 
141
141
  ```
142
142
 
143
- これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard()`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。
143
+ これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。