回答編集履歴
1
誤字修正
test
CHANGED
@@ -14,7 +14,11 @@
|
|
14
14
|
|
15
15
|
また第二に、変数の代入に関わるフックがありません。
|
16
16
|
|
17
|
-
属性の代入に関わるフックはあるのですが
|
17
|
+
属性の代入に関わるフックはあるのですが...
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
`__getattr__`, `__setattr__` などが該当するかなと思います。
|
18
22
|
|
19
23
|
|
20
24
|
|
@@ -24,43 +28,63 @@
|
|
24
28
|
|
25
29
|
リストや辞書の要素、あるいはクラスの属性として持たせることです。
|
26
30
|
|
31
|
+
これはこれで面倒で、質問の意図から反してしまっていますが。
|
32
|
+
|
27
33
|
|
28
34
|
|
29
35
|
```python
|
30
36
|
|
31
|
-
lst = [
|
37
|
+
list_a = [0]
|
32
38
|
|
33
|
-
lst
|
39
|
+
list_b = list_a
|
34
40
|
|
41
|
+
|
42
|
+
|
43
|
+
list_b[0] = 1
|
44
|
+
|
35
|
-
|
45
|
+
list_a[0] == 1 # True
|
36
46
|
|
37
47
|
```
|
38
48
|
|
39
49
|
```python
|
40
50
|
|
41
|
-
dct = {0:
|
51
|
+
dict_a = {0: 0}
|
42
52
|
|
43
|
-
dct
|
53
|
+
dict_b = dict_a
|
44
54
|
|
55
|
+
|
56
|
+
|
57
|
+
dict_b[0] = 1
|
58
|
+
|
45
|
-
|
59
|
+
dict_a[0] == 1 # True
|
46
60
|
|
47
61
|
```
|
48
62
|
|
49
63
|
```python
|
50
64
|
|
51
|
-
class Cls: pass
|
65
|
+
class Class: pass
|
52
66
|
|
53
67
|
|
54
68
|
|
55
|
-
obj = Cls()
|
69
|
+
object_0 = Class()
|
56
70
|
|
57
|
-
obj
|
71
|
+
object_1 = object_0
|
58
72
|
|
59
|
-
obj.attr = 'b'
|
60
73
|
|
74
|
+
|
75
|
+
object_1.attribute = 1
|
76
|
+
|
61
|
-
|
77
|
+
object_0.attribute == 1 # True
|
62
78
|
|
63
79
|
```
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
変数に代入してもオブジェクトは変化しませんが、
|
84
|
+
|
85
|
+
属性に代入するとオブジェクトは変化するというのがポイントです。
|
86
|
+
|
87
|
+
* [Python の代入ってなに?](https://python.ms/object/identity/assignment/)
|
64
88
|
|
65
89
|
|
66
90
|
|