回答編集履歴
1
修正
test
CHANGED
@@ -1,153 +1,9 @@
|
|
1
|
-
save関数の中で最後に実行している`super().save(*args, **kwargs)`とありますが
|
2
|
-
|
3
|
-
`*args, **kwargs`というのは可変長引数といって、関数を実行するときに与えるものではありません。
|
4
|
-
|
5
|
-
実行する関数で、引数を受け取る時に使用するものです。
|
6
|
-
|
7
|
-
よって使用例としては以下の様な形式が正しいでしょう。
|
8
|
-
|
9
|
-
```python
|
10
|
-
|
11
|
-
def sample(*args):
|
12
|
-
|
13
|
-
print(type(args))
|
14
|
-
|
15
|
-
print(args)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
sample('apple', 'bike', 'car', 'desk')
|
20
|
-
|
21
|
-
>> <class 'tuple'>
|
22
|
-
|
23
|
-
>> ('apple', 'bike', 'car', 'desk')
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
def sample2(**kwargs):
|
30
|
-
|
31
|
-
print(type(kwargs))
|
32
|
-
|
33
|
-
print(kwargs)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
sample2(a=1, b=2, c=3, d=4)
|
38
|
-
|
39
|
-
>> <class 'dict'>
|
40
|
-
|
41
|
-
>> {'a': 1, 'b': 2, 'c': 3, 'd': 4}
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
```
|
46
|
-
|
47
|
-
引数についてはこちらが非常に参考になると思います。
|
48
|
-
|
49
|
-
[https://atmarkit.itmedia.co.jp/ait/articles/1905/21/news009.html](https://atmarkit.itmedia.co.jp/ait/articles/1905/21/news009.html)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
---
|
54
|
-
|
55
|
-
例えば
|
56
|
-
|
57
|
-
save変数の中で定義されたクラス変数を、
|
58
|
-
|
59
|
-
passorfail関数に引数として渡したい
|
60
|
-
|
61
|
-
というのならば引数を何か設定する必要があります。
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
掲題のコードでは
|
66
|
-
|
67
|
-
pasorfail変数の中でself.next_calibration_dateとtoday.monthを比較するという
|
68
|
-
|
69
|
-
構成の様ですが、この場合save関数内のクラス変数を使用しているわけではなく
|
70
|
-
|
71
|
-
**self.next_calibration_date**と定義されたインスタンス変数を使用しているものである為
|
72
|
-
|
73
|
-
あえて引数はわざわざ何も設定しなくても良いかもしれません。
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
例えばsave関数の中で、最後にpassorfail関数を実行したいという事であれば以下の様にする事で動作しないでしょうか。
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
```python
|
82
|
-
|
83
|
-
# これを関数1とします。
|
84
|
-
|
85
|
-
def save(self, *args, **kwargs):
|
86
|
-
|
87
|
-
auto_now = kwargs.pop('next_calibration_date_auto_now', True)
|
88
|
-
|
89
|
-
if auto_now:
|
90
|
-
|
91
|
-
if self.calibration_type == CALIBRATION_CHOICES[0][0]:
|
92
|
-
|
93
|
-
calibration_span = 1
|
94
|
-
|
95
|
-
elif self.calibration_type == CALIBRATION_CHOICES[1][0]:
|
96
|
-
|
97
|
-
calibration_span = 2
|
98
|
-
|
99
|
-
elif self.calibration_type == CALIBRATION_CHOICES[2][0]:
|
100
|
-
|
101
|
-
calibration_span = 5
|
102
|
-
|
103
|
-
elif self.calibration_type == CALIBRATION_CHOICES[3][0]:
|
104
|
-
|
105
|
-
calibration_span = 10
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
self.next_calibration_date = self.calibration_date + relativedelta(years=calibration_span)
|
110
|
-
|
111
|
-
# passorfail関数を実行
|
112
|
-
|
113
|
-
self.passorfail()
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
# これを関数2とします。
|
120
|
-
|
121
|
-
def passorfail(self):
|
122
|
-
|
123
|
-
today = datetime.today()
|
124
|
-
|
125
|
-
# save関数内で定義されたインスタンス引数とtoday.monthを比較して条件分岐
|
126
|
-
|
127
|
-
if self.next_calibration_date == (today.month):
|
128
|
-
|
129
|
-
pass_result = ('校正対象')
|
130
|
-
|
131
|
-
elif self.next_calibration_date > (today.month):
|
132
|
-
|
133
|
-
pass_result = ('合格')
|
134
|
-
|
135
|
-
else:
|
136
|
-
|
137
|
-
pass_result = ('不合格')
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
self.ins_result = pass_result
|
142
|
-
|
143
|
-
```
|
144
|
-
|
145
1
|
passorfail関数内でself.next_calibration_dateがNoneTypeになっていた様ですが
|
146
2
|
|
147
3
|
save関数を1とし、passorfail関数を2とするならば
|
148
4
|
|
5
|
+
passorfail関数をsave関数とリネームした事により
|
6
|
+
|
149
7
|
1を実行しているつもりが2だけを実行していた為に
|
150
8
|
|
151
|
-
self.next_calibration_dateが定義されていなかった事が原因でしょう。
|
9
|
+
self.next_calibration_dateが定義されていなかった事が原因の一つでしょう。
|
152
|
-
|
153
|
-
※あくまでおかしな点を挙げたものであり、上記コードに修正をしたから必ず動くというものではありません。
|