回答編集履歴

2

追記

2021/05/05 09:32

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -55,3 +55,65 @@
55
55
 
56
56
 
57
57
  クラスメソッドはクラス自身を第一引数に取れます。なので、`cls`を使って何らかの処理を行うようなクラスメソッドであれば、サブクラスから呼び出した場合も適切に機能することが期待できる、というのは、関数にはないメリットと言えると思います。
58
+
59
+
60
+
61
+ ```python
62
+
63
+ class Hoge:
64
+
65
+ ほにゃらら
66
+
67
+
68
+
69
+ class Fuga:
70
+
71
+ @classmethod
72
+
73
+ def from_hoge(cls, hogeobj):
74
+
75
+ hogeobjを加工したりとか色々する
76
+
77
+ return cls(ほにゃらら)
78
+
79
+ ```
80
+
81
+
82
+
83
+ という感じの定義があったときに、
84
+
85
+
86
+
87
+ ```python
88
+
89
+ class FugaX(Fuga):
90
+
91
+ ほにゃらら
92
+
93
+
94
+
95
+ class FugaY(Fuga):
96
+
97
+ ほにゃらら
98
+
99
+
100
+
101
+ class FugaZ(Fuga):
102
+
103
+ ほにゃらら
104
+
105
+
106
+
107
+ hoge = Hoge()
108
+
109
+ fx = FugaX.from_hoge(hoge) # fxはFugaXのインスタンスになる
110
+
111
+ fy = FugaY.from_hoge(hoge) # fyはFugaYのインスタンスになる
112
+
113
+ fz = FugaZ.from_hoge(hoge) # fzはFugaZのインスタンスになる
114
+
115
+ ```
116
+
117
+
118
+
119
+ ということができるという理屈です。

1

追記

2021/05/05 09:32

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -43,3 +43,15 @@
43
43
 
44
44
 
45
45
  こういうのは関数よりはメソッドにしたが使いやすいですし、コンストラクタに直接実装するとコードの見通しが悪くなります。ということでクラスメソッドが適当な感じがします。
46
+
47
+
48
+
49
+ ---
50
+
51
+
52
+
53
+ ということは[質問者さんの参考にしているページ](https://blog.pyq.jp/entry/Python_kaiketsu_190205)にも書いてあるな……とあとから見て思ったので、ちょっと追記。
54
+
55
+
56
+
57
+ クラスメソッドはクラス自身を第一引数に取れます。なので、`cls`を使って何らかの処理を行うようなクラスメソッドであれば、サブクラスから呼び出した場合も適切に機能することが期待できる、というのは、関数にはないメリットと言えると思います。