回答編集履歴
2
super()であるべき
answer
CHANGED
@@ -69,4 +69,21 @@
|
|
69
69
|
def __init__(self,app):
|
70
70
|
tk.Canvas.__init__(self,app)
|
71
71
|
```
|
72
|
-
これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。
|
72
|
+
これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。
|
73
|
+
|
74
|
+
----
|
75
|
+
|
76
|
+
ところで、Python3ではこう書くべきです。
|
77
|
+
|
78
|
+
```python
|
79
|
+
class GameBoard(tk.Canvas):
|
80
|
+
def __init__(self,app):
|
81
|
+
super().__init__(self,app)
|
82
|
+
```
|
83
|
+
|
84
|
+
Python公式ドキュメントの
|
85
|
+
[super()の説明](https://docs.python.org/ja/3/library/functions.html#super)
|
86
|
+
[3.0のWhat's New](https://docs.python.org/ja/3/whatsnew/3.0.html#builtins)
|
87
|
+
[多重継承の項](https://docs.python.org/ja/3/tutorial/classes.html#multiple-inheritance)
|
88
|
+
を参考に。
|
89
|
+
プログラマが"自分でこれが上位だと思っている"クラス名をハードコードするのはちょっとだけ危険です。
|
1
誤解がでないように GameBoard() の表記を GameBoard(...) に変更
answer
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
app.mainloop()
|
51
51
|
```
|
52
52
|
|
53
|
-
これは動きます。`GameBoard.__init__`が定義されていないので、`GameBoard()`でGameBoardをインスタンス化すると`tk.Canvas.__init__`が動くからです。
|
53
|
+
これは動きます。`GameBoard.__init__`が定義されていないので、`GameBoard(...)`でGameBoardをインスタンス化すると`tk.Canvas.__init__`が動くからです。
|
54
54
|
|
55
55
|
----
|
56
56
|
|
@@ -60,7 +60,7 @@
|
|
60
60
|
pass
|
61
61
|
```
|
62
62
|
|
63
|
-
これは動きません。`GameBoard.__init__`が定義されているので、`GameBoard()`でGameBoardをインスタンス化すると`GameBoard.__init__`が動きますがその実装が空なので、`tk.Canvas.__init__`が**実行されることがない**からです。
|
63
|
+
これは動きません。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動きますがその実装が空なので、`tk.Canvas.__init__`が**実行されることがない**からです。
|
64
64
|
|
65
65
|
----
|
66
66
|
|
@@ -69,4 +69,4 @@
|
|
69
69
|
def __init__(self,app):
|
70
70
|
tk.Canvas.__init__(self,app)
|
71
71
|
```
|
72
|
-
これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard()`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。
|
72
|
+
これは動きます。`GameBoard.__init__`が定義されているので、`GameBoard(...)`でGameBoardをインスタンス化すると`GameBoard.__init__`が動いて、その中で`tk.Canvas.__init__`が実行されるので`tk.Canvas`に必要な処理がされるからです。
|