質問するログイン新規登録

回答編集履歴

3

ことばがたらんかった

2016/10/21 05:01

投稿

toritoritorina
toritoritorina

スコア972

answer CHANGED
@@ -46,7 +46,7 @@
46
46
  ```
47
47
 
48
48
  selfがなくて良い理由ですが、上のコードは実質以下のコードと同義です。
49
- selfを使うのはあくまでselfが定義しているメソッド内で、今回の例ではdecoratorは素直に参照できます。
49
+ selfを使うのはあくまでselfが定義しているメソッド内で、今回の例ではdecoratorメソッドは素直に参照できます。
50
50
  ```python
51
51
  # デコレータをつけないバージョン
52
52
  def print_hoge(self, *args, **kwargs):

2

追記

2016/10/21 05:01

投稿

toritoritorina
toritoritorina

スコア972

answer CHANGED
@@ -43,4 +43,14 @@
43
43
 
44
44
  temp = MyClass()
45
45
  temp.print_hoge()
46
- ```
46
+ ```
47
+
48
+ selfがなくて良い理由ですが、上のコードは実質以下のコードと同義です。
49
+ selfを使うのはあくまでselfが定義しているメソッド内で、今回の例ではdecoratorは素直に参照できます。
50
+ ```python
51
+ # デコレータをつけないバージョン
52
+ def print_hoge(self, *args, **kwargs):
53
+ print "hoge"
54
+ print_hoge = decorator(print_hoge)
55
+ # print_hoge = self.decorator(print_hoge) selfをつけるとエラー。
56
+ ```

1

追記

2016/10/21 03:33

投稿

toritoritorina
toritoritorina

スコア972

answer CHANGED
@@ -18,4 +18,29 @@
18
18
 
19
19
  temp = MyClass()
20
20
  temp.print_hoge()
21
+ ```
22
+
23
+ self 等にアクセスしたい場合は、以下のようにします。
24
+ ```python
25
+ #coding: utf-8
26
+
27
+ class MyClass(object):
28
+ def __init__(self):
29
+ self.my_var = "my_var" # 追加しました
30
+
31
+ def decorator(func):
32
+ def inner(self, *args, **kwargs):
33
+ print "pre func"
34
+ print self.my_var # 追加しました
35
+ func(self, *args, **kwargs)
36
+ print "after_func"
37
+ return inner
38
+
39
+ @decorator
40
+ def print_hoge(self, *args, **kwargs):
41
+ print "hoge"
42
+
43
+
44
+ temp = MyClass()
45
+ temp.print_hoge()
21
46
  ```