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

回答編集履歴

2

追記

2019/07/09 11:53

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -18,4 +18,42 @@
18
18
  コンストラクタというのが`__init__`メソッドを指すなら、有用には扱えません。
19
19
  デコレータとは高階関数を噛ませた再代入に過ぎないからです。
20
20
 
21
- 文法上は問題無いと思いますが、あまりに実用とかけ離れます。
21
+ 文法上は問題無いと思いますが、あまりに実用とかけ離れます。
22
+
23
+ 追記
24
+ ---
25
+ あ、こういうのなら可能ですよ。`__init__`は内部的に呼ばれます。
26
+ ```Python
27
+ class Parent(object):
28
+ def __init__(self, func):
29
+ self.func = func
30
+
31
+ def __call__(self, mojiretsu):
32
+ print('start')
33
+ self.func(mojiretsu)
34
+ print('end')
35
+
36
+ class Child1(Parent):
37
+ def __init__(self):
38
+ pass
39
+
40
+ @Parent
41
+ def child1(mojiretsu):
42
+ print('1: ' + mojiretsu)
43
+
44
+ class Child2(Parent):
45
+ def __init__(self):
46
+ pass
47
+
48
+ @Parent
49
+ def child2(mojiretsu):
50
+ print('2: ' + mojiretsu)
51
+
52
+ c1 = Child1()
53
+ c2 = Child2()
54
+
55
+ c1.child1('aiueo')
56
+ c2.child2('12345')
57
+ ```
58
+
59
+ しかしこれも使い勝手は良くなさそうです。

1

追記

2019/07/09 11:53

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -15,5 +15,7 @@
15
15
 
16
16
  > コンストラクタはデコレータにできますか?
17
17
 
18
- コンストラクタというのが`__init__`メソッドを指すなら、できません。
18
+ コンストラクタというのが`__init__`メソッドを指すなら、有用には扱えません。
19
- デコレータとは高階関数を噛ませた再代入に過ぎないからです。
19
+ デコレータとは高階関数を噛ませた再代入に過ぎないからです。
20
+
21
+ 文法上は問題無いと思いますが、あまりに実用とかけ離れます。