回答編集履歴

2

重要な注意点を追記

2021/09/06 06:31

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -1,3 +1,13 @@
1
+ 根本的な問題として、maxDepthが関数かメソッドなのかは置いておいて、値を返すだけでなく引数の属性を変更あるいは追加しているということに注意が必要です。
2
+
3
+ 勝手にself.max_depthをmax_depthに変更すると、戻り値が返ったとしても、引数の属性(self.max_depth)は想定通りの値が入っていません。呼び出し側が後でself.max_depthを使おうとしてもそれが使えませんので、全体として正しく動く保証がなくなります。
4
+
5
+
6
+
7
+ とりあえず、上記のことが絶対に起こらないという前提で考えてみます。
8
+
9
+
10
+
1
11
  これはメソッドの話なのかメソッドの話ではないのかはっきりしていませんが、いずれにしてもインスタンス変数かどうかとは関係ない話です。
2
12
 
3
13
 

1

用語の間違いを修正&参照リンクを追加

2021/09/06 06:31

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -96,9 +96,13 @@
96
96
 
97
97
 
98
98
 
99
- 2行目のmax_depthは関数maxDepthの自由変数となります。ここで代入をしているのでローカル変数と解釈されます。
99
+ 2行目のmax_depthは関数maxDepthの変数となります。ここで定義をしているのでローカル変数と解釈されます。
100
100
 
101
- 関数helper内のmax_depthは自由変数となり、代入があるのでローカル変数と解釈されます。すると右辺で参照しているので未定義の変数を使おうとしていることになってエラーとなります。
101
+ 関数helper内のmax_depthは変数となり、ここで定義をしているのでローカル変数と解釈されます。すると右辺で参照しているので未定義の変数を使おうとしていることになってエラーとなります。
102
+
103
+
104
+
105
+ 詳しくは、[4.2. 名前づけと束縛 (naming and binding)](https://docs.python.org/ja/3/reference/executionmodel.html#naming-and-binding)をお読みください。
102
106
 
103
107
 
104
108