回答編集履歴
1
誤字修正
answer
CHANGED
@@ -6,31 +6,43 @@
|
|
6
6
|
これは既に質問文に挙動を示されているので、ご存知の通りです。
|
7
7
|
|
8
8
|
また第二に、変数の代入に関わるフックがありません。
|
9
|
-
属性の代入に関わるフックはあるのですが
|
9
|
+
属性の代入に関わるフックはあるのですが...
|
10
10
|
|
11
|
+
`__getattr__`, `__setattr__` などが該当するかなと思います。
|
11
12
|
|
13
|
+
|
12
14
|
#### ◯ 代替案
|
13
15
|
リストや辞書の要素、あるいはクラスの属性として持たせることです。
|
16
|
+
これはこれで面倒で、質問の意図から反してしまっていますが。
|
14
17
|
|
15
18
|
```python
|
19
|
+
list_a = [0]
|
16
|
-
|
20
|
+
list_b = list_a
|
21
|
+
|
22
|
+
list_b[0] = 1
|
17
|
-
|
23
|
+
list_a[0] == 1 # True
|
18
|
-
assert lst[0] == 'b'
|
19
24
|
```
|
20
25
|
```python
|
21
|
-
|
26
|
+
dict_a = {0: 0}
|
27
|
+
dict_b = dict_a
|
28
|
+
|
29
|
+
dict_b[0] = 1
|
22
|
-
|
30
|
+
dict_a[0] == 1 # True
|
23
|
-
assert dct[0] == 'b'
|
24
31
|
```
|
25
32
|
```python
|
26
|
-
class
|
33
|
+
class Class: pass
|
27
34
|
|
28
|
-
|
35
|
+
object_0 = Class()
|
29
|
-
obj.attr = 'a'
|
30
|
-
|
36
|
+
object_1 = object_0
|
37
|
+
|
38
|
+
object_1.attribute = 1
|
31
|
-
|
39
|
+
object_0.attribute == 1 # True
|
32
40
|
```
|
33
41
|
|
42
|
+
変数に代入してもオブジェクトは変化しませんが、
|
43
|
+
属性に代入するとオブジェクトは変化するというのがポイントです。
|
44
|
+
* [Python の代入ってなに?](https://python.ms/object/identity/assignment/)
|
45
|
+
|
34
46
|
#### ◯
|
35
47
|
|
36
48
|
状態を持たせるために関数の引数の初期値に値を持たせるとか
|