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

回答編集履歴

4

説明補足

2020/06/20 14:09

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  単に記述量が少なく成るからという理由で使われることは多いです。
20
20
 
21
21
 
22
- 一方で、メンバー変数にインスタンスを保持する関係は、「委譲」と言います
22
+ 一方で、メンバー変数にインスタンスを保持して、外部から操作する場合は、「委譲」と言います
23
23
 
24
24
  - Application のロジックを Tkinter から切り離したい場合は、
25
25
  こちらの方が好ましい。 -> Tkinter に依存せずコードのテストが可能になる

3

説明補足

2020/06/20 14:09

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -1,12 +1,34 @@
1
1
  どちらかと言うと後々問題になる可能性があるのは、継承(サブクラス化)した方ですね。
2
2
  稀な例ですが、アップデートで親クラスに自分が追加したメソッドと同じ名前のメソッドが追加された等。
3
3
 
4
+ 設計に関しては、何を目的とするかによって最善策は変わってくるので
5
+ 一概にどうすればよいとは言えない部分はあります。一言でいうと case-by-case
6
+ こういった場合はこうした方が良い、というように、目的とする部分・前提条件の共有が必要です。
4
7
 
5
- 詳しくは、「委譲」や「継承」と、その使い分けついて調べてみると良いです。
8
+ 一般的な事を言うと、それぞれ長所・短所はあります。
6
9
 
7
- - `class Class(tk.Frame):` というやつ は「継承」と言い
8
- - リンク先の、`classのメンバー変数にインスタンスを保持`する事を「委譲」と言います
9
10
 
11
+ `class Application(tk.Frame):` の様な書き方の場合、「継承」と言い
12
+ 「継承」の一番の問題点は、親クラスと不要な名前空間の共有が発生してしまう点でしょうか。
13
+
14
+ self.xxx で Frame クラスの属性にアクセスできるので、
15
+ 自分で新しくメソッドやプロパティを追加したい場合、
16
+ 親クラスと被らないかどうかを確認する必要があります。
17
+
18
+ サンプルコード等の短い例では、それ程デメリットにならない為、
19
+ 単に記述量が少なく成るからという理由で使われることは多いです。
20
+
21
+
22
+ 一方で、メンバー変数にインスタンスを保持する関係は、「委譲」と言います
23
+
24
+ - Application のロジックを Tkinter から切り離したい場合は、
25
+ こちらの方が好ましい。 -> Tkinter に依存せずコードのテストが可能になる
26
+ - 再利用を気にしなくても良い場合は、若干冗長になる。(書き捨てのコード等)
27
+
28
+ 他にも色々あるので、
29
+ 詳しくは、「移譲」や「継承」とその使い分けに関して調べて見て下さい。
30
+
31
+
10
32
  ----
11
33
  Tkinter 特有の事情
12
34
 

2

誤字修正

2020/06/20 13:22

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  詳しくは、「委譲」や「継承」と、その使い分けについて調べてみると良いです。
6
6
 
7
7
  - `class Class(tk.Frame):` というやつ は「継承」と言い
8
- - リンク先の、`classのメンバー変数にインスタンスを保持`する事を「譲」と言います
8
+ - リンク先の、`classのメンバー変数にインスタンスを保持`する事を「譲」と言います
9
9
 
10
10
  ----
11
11
  Tkinter 特有の事情

1

誤字修正

2020/06/20 13:02

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -2,7 +2,7 @@
2
2
  稀な例ですが、アップデートで親クラスに自分が追加したメソッドと同じ名前のメソッドが追加された等。
3
3
 
4
4
 
5
- 詳しくは、「譲」や「継承」と、その使い分けについて調べてみると良いです。
5
+ 詳しくは、「譲」や「継承」と、その使い分けについて調べてみると良いです。
6
6
 
7
7
  - `class Class(tk.Frame):` というやつ は「継承」と言い
8
8
  - リンク先の、`classのメンバー変数にインスタンスを保持`する事を「移譲」と言います