回答編集履歴

3

ことばがたらんかった

2016/10/21 05:01

投稿

toritoritorina
toritoritorina

スコア972

test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
  selfがなくて良い理由ですが、上のコードは実質以下のコードと同義です。
96
96
 
97
- selfを使うのはあくまでselfが定義しているメソッド内で、今回の例ではdecoratorは素直に参照できます。
97
+ selfを使うのはあくまでselfが定義しているメソッド内で、今回の例ではdecoratorメソッドは素直に参照できます。
98
98
 
99
99
  ```python
100
100
 

2

追記

2016/10/21 05:01

投稿

toritoritorina
toritoritorina

スコア972

test CHANGED
@@ -89,3 +89,25 @@
89
89
  temp.print_hoge()
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+ selfがなくて良い理由ですが、上のコードは実質以下のコードと同義です。
96
+
97
+ selfを使うのはあくまでselfが定義しているメソッド内で、今回の例ではdecoratorは素直に参照できます。
98
+
99
+ ```python
100
+
101
+ # デコレータをつけないバージョン
102
+
103
+ def print_hoge(self, *args, **kwargs):
104
+
105
+ print "hoge"
106
+
107
+ print_hoge = decorator(print_hoge)
108
+
109
+ # print_hoge = self.decorator(print_hoge) selfをつけるとエラー。
110
+
111
+ ```
112
+
113
+

1

追記

2016/10/21 03:33

投稿

toritoritorina
toritoritorina

スコア972

test CHANGED
@@ -39,3 +39,53 @@
39
39
  temp.print_hoge()
40
40
 
41
41
  ```
42
+
43
+
44
+
45
+ self 等にアクセスしたい場合は、以下のようにします。
46
+
47
+ ```python
48
+
49
+ #coding: utf-8
50
+
51
+
52
+
53
+ class MyClass(object):
54
+
55
+ def __init__(self):
56
+
57
+ self.my_var = "my_var" # 追加しました
58
+
59
+
60
+
61
+ def decorator(func):
62
+
63
+ def inner(self, *args, **kwargs):
64
+
65
+ print "pre func"
66
+
67
+ print self.my_var # 追加しました
68
+
69
+ func(self, *args, **kwargs)
70
+
71
+ print "after_func"
72
+
73
+ return inner
74
+
75
+
76
+
77
+ @decorator
78
+
79
+ def print_hoge(self, *args, **kwargs):
80
+
81
+ print "hoge"
82
+
83
+
84
+
85
+
86
+
87
+ temp = MyClass()
88
+
89
+ temp.print_hoge()
90
+
91
+ ```