回答編集履歴

1

誤字修正

2019/10/20 10:14

投稿

nico25
nico25

スコア830

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 = ['a']
37
+ list_a = [0]
32
38
 
33
- lst[0] = 'b'
39
+ list_b = list_a
34
40
 
41
+
42
+
43
+ list_b[0] = 1
44
+
35
- assert lst[0] == 'b'
45
+ list_a[0] == 1 # True
36
46
 
37
47
  ```
38
48
 
39
49
  ```python
40
50
 
41
- dct = {0: 'a'}
51
+ dict_a = {0: 0}
42
52
 
43
- dct[0] = 'b'
53
+ dict_b = dict_a
44
54
 
55
+
56
+
57
+ dict_b[0] = 1
58
+
45
- assert dct[0] == 'b'
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.attr = 'a'
71
+ object_1 = object_0
58
72
 
59
- obj.attr = 'b'
60
73
 
74
+
75
+ object_1.attribute = 1
76
+
61
- assert obj.attr == 'b'
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