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

回答編集履歴

2

追記

2021/05/05 09:32

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -26,4 +26,35 @@
26
26
 
27
27
  ということは[質問者さんの参考にしているページ](https://blog.pyq.jp/entry/Python_kaiketsu_190205)にも書いてあるな……とあとから見て思ったので、ちょっと追記。
28
28
 
29
- クラスメソッドはクラス自身を第一引数に取れます。なので、`cls`を使って何らかの処理を行うようなクラスメソッドであれば、サブクラスから呼び出した場合も適切に機能することが期待できる、というのは、関数にはないメリットと言えると思います。
29
+ クラスメソッドはクラス自身を第一引数に取れます。なので、`cls`を使って何らかの処理を行うようなクラスメソッドであれば、サブクラスから呼び出した場合も適切に機能することが期待できる、というのは、関数にはないメリットと言えると思います。
30
+
31
+ ```python
32
+ class Hoge:
33
+ ほにゃらら
34
+
35
+ class Fuga:
36
+ @classmethod
37
+ def from_hoge(cls, hogeobj):
38
+ hogeobjを加工したりとか色々する
39
+ return cls(ほにゃらら)
40
+ ```
41
+
42
+ という感じの定義があったときに、
43
+
44
+ ```python
45
+ class FugaX(Fuga):
46
+ ほにゃらら
47
+
48
+ class FugaY(Fuga):
49
+ ほにゃらら
50
+
51
+ class FugaZ(Fuga):
52
+ ほにゃらら
53
+
54
+ hoge = Hoge()
55
+ fx = FugaX.from_hoge(hoge) # fxはFugaXのインスタンスになる
56
+ fy = FugaY.from_hoge(hoge) # fyはFugaYのインスタンスになる
57
+ fz = FugaZ.from_hoge(hoge) # fzはFugaZのインスタンスになる
58
+ ```
59
+
60
+ ということができるという理屈です。

1

追記

2021/05/05 09:32

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -20,4 +20,10 @@
20
20
  >
21
21
  > [組み込み型 — Python 3.9.4 ドキュメント | int.from_bytes](https://docs.python.org/ja/3/library/stdtypes.html?highlight=dict#int.from_bytes)
22
22
 
23
- こういうのは関数よりはメソッドにしたが使いやすいですし、コンストラクタに直接実装するとコードの見通しが悪くなります。ということでクラスメソッドが適当な感じがします。
23
+ こういうのは関数よりはメソッドにしたが使いやすいですし、コンストラクタに直接実装するとコードの見通しが悪くなります。ということでクラスメソッドが適当な感じがします。
24
+
25
+ ---
26
+
27
+ ということは[質問者さんの参考にしているページ](https://blog.pyq.jp/entry/Python_kaiketsu_190205)にも書いてあるな……とあとから見て思ったので、ちょっと追記。
28
+
29
+ クラスメソッドはクラス自身を第一引数に取れます。なので、`cls`を使って何らかの処理を行うようなクラスメソッドであれば、サブクラスから呼び出した場合も適切に機能することが期待できる、というのは、関数にはないメリットと言えると思います。