回答編集履歴

5

追記

2019/11/28 15:11

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -128,6 +128,8 @@
128
128
 
129
129
  ## https://stackoverflow.com/questions/25577578/access-class-variable-from-instance
130
130
 
131
+ ## https://python.ms/attribute/#_2-%E3%82%AF%E3%83%A9%E3%82%B9%E5%A4%89%E6%95%B0%E3%81%AE%E5%8F%82%E7%85%A7%E3%81%AE%E4%BB%95%E6%96%B9
132
+
131
133
  def method2(self):
132
134
 
133
135
  """ 予想:インスタンスメソッド(クラスとインスタンス両方参照?) """

4

追記に関して

2019/11/28 15:11

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -73,3 +73,103 @@
73
73
  あとここも見ておくべきです。
74
74
 
75
75
  [なぜメソッドの定義や呼び出しにおいて 'self' を明示しなければならないのですか? | デザインと歴史 FAQ — Python 3.8.0 ドキュメント](https://docs.python.org/ja/3/faq/design.html#why-must-self-be-used-explicitly-in-method-definitions-and-calls)
76
+
77
+
78
+
79
+ ###### 追記に関して
80
+
81
+ ```python
82
+
83
+ ## 私が付けたコメントはこのように二重の#で示すことにします
84
+
85
+
86
+
87
+ class TestCommon:
88
+
89
+ ## このtestは他の言語で言うところのクラス変数であり、
90
+
91
+ ## インスタンス変数は同様には作れません
92
+
93
+ ## (__init__でselfの属性に対して代入して作ったりするが、それは特別な操作ではない
94
+
95
+ ## (__init__以外の場所でもできる))
96
+
97
+ test = "てすと"
98
+
99
+
100
+
101
+ ## これは実際こんな感じ
102
+
103
+   @classmethod
104
+
105
+ def method1(cls):
106
+
107
+ """ 予想:クラスメソッド (クラスのみの参照?) """
108
+
109
+ # メンバ変数を参照=クラスだけ参照?
110
+
111
+ print(cls.test)
112
+
113
+
114
+
115
+
116
+
117
+ ## TestCommon.testはいかにも駄目な感じがします
118
+
119
+ ## 参照だけならself.testでも同じ結果が得られます。ただしこれに代入すると、
120
+
121
+ ## self.test(インスタンス変数)がクラス変数とは別に作られてしまいます
122
+
123
+ ## インスタンスメソッドからクラス変数に代入する場合のやり方は悩ましい問題です
124
+
125
+ ## (これ!という答えは見たことないかも。self.__class__.testかtype(self).testの二択になり、後者のほうがどちらかというと良いということになりそうですが)
126
+
127
+ ## https://qiita.com/FGtatsuro/items/be22c520e62a1d100e09
128
+
129
+ ## https://stackoverflow.com/questions/25577578/access-class-variable-from-instance
130
+
131
+ def method2(self):
132
+
133
+ """ 予想:インスタンスメソッド(クラスとインスタンス両方参照?) """
134
+
135
+ # selfを使わずにクラス名.メンバ変数で呼び出し?
136
+
137
+ print(TestCommon.test)
138
+
139
+ # インスタンスを参照?
140
+
141
+ print(self.request.POST)
142
+
143
+
144
+
145
+
146
+
147
+ ## これは実際こう
148
+
149
+ def method3(self):
150
+
151
+ """ 予想:インスタンスメソッド(クラス参照なし?) """
152
+
153
+ print(self.request.POST)
154
+
155
+
156
+
157
+
158
+
159
+ ## selfやclsに類するものを取らないだけで、引数自体は何ら問題なく受けとれます
160
+
161
+ ## インスタンスメソッドのときの第二引数以降は問題なく与えられるということです
162
+
163
+ ## 私の書き方が悪かったかも
164
+
165
+ @staticmethod
166
+
167
+ def method4(data):
168
+
169
+ """ 予想:スタティックメソッドにすると引数エラー? """
170
+
171
+ # 引数取らない=受け取れない???
172
+
173
+ return data
174
+
175
+ ```

3

追記

2019/11/28 15:08

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -1,3 +1,7 @@
1
+ Python3系を前提に回答します。2以前は仕様が違います。
2
+
3
+
4
+
1
5
  ###### 直接の回答
2
6
 
3
7
  - インスタンスメソッド
@@ -63,3 +67,9 @@
63
67
  (と思って貼り付けたら、先にこのサイトの著者の[nico25さん](https://teratail.com/users/nico25)が[回答されてしまった・・・](https://teratail.com/questions/226164#reply-330699))
64
68
 
65
69
  [Python の関数とメソッドの違いってなに? | Mastering Python](https://python.ms/method/#_3-%E8%A7%A6%E3%81%A3%E3%81%A6%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82)
70
+
71
+
72
+
73
+ あとここも見ておくべきです。
74
+
75
+ [なぜメソッドの定義や呼び出しにおいて 'self' を明示しなければならないのですか? | デザインと歴史 FAQ — Python 3.8.0 ドキュメント](https://docs.python.org/ja/3/faq/design.html#why-must-self-be-used-explicitly-in-method-definitions-and-calls)

2

追記

2019/11/28 13:44

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -60,6 +60,6 @@
60
60
 
61
61
  公式ではないですが、こちらのページも参考になります。わかりやすいので仕組みが気になるなら読んでください。
62
62
 
63
- (と思って貼り付けたら、先にこのサイトの著者のnico25さんが回答されてしまった・・・)
63
+ (と思って貼り付けたら、先にこのサイトの著者の[nico25さん](https://teratail.com/users/nico25)[回答されてしまった・・・](https://teratail.com/questions/226164#reply-330699)
64
64
 
65
65
  [Python の関数とメソッドの違いってなに? | Mastering Python](https://python.ms/method/#_3-%E8%A7%A6%E3%81%A3%E3%81%A6%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82)

1

追記

2019/11/28 13:34

投稿

hayataka2049
hayataka2049

スコア30935

test CHANGED
@@ -60,6 +60,6 @@
60
60
 
61
61
  公式ではないですが、こちらのページも参考になります。わかりやすいので仕組みが気になるなら読んでください。
62
62
 
63
-
63
+ (と思って貼り付けたら、先にこのサイトの著者のnico25さんが回答されてしまった・・・)
64
64
 
65
65
  [Python の関数とメソッドの違いってなに? | Mastering Python](https://python.ms/method/#_3-%E8%A7%A6%E3%81%A3%E3%81%A6%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82)