回答編集履歴

2

追加質問への回答

2021/03/29 13:22

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -47,3 +47,83 @@
47
47
  <class 'type'>
48
48
 
49
49
  ```
50
+
51
+
52
+
53
+ 追加質問への回答です。
54
+
55
+
56
+
57
+ - "typeはクラスのクラス" とはどういうことでしょうか??
58
+
59
+
60
+
61
+ Pythonではすべてはオブジェクトです。
62
+
63
+ すべてのオブジェクトはクラスを持ちます。
64
+
65
+ 1.0という浮動小数のクラスはfloatであり、それを調べるためには、type(float)を使うか、1.0.__class__を使います。
66
+
67
+ type(float)はtypeというクラスです。
68
+
69
+
70
+
71
+ 詳しくは公式ドキュメントの[class type](https://docs.python.org/ja/3/library/functions.html?highlight=type#type)を読んでください。
72
+
73
+
74
+
75
+ - SignigKey()とSigningKeyの場合,前者がオブジェクト(インスタンス)で,SigningKeyがクラスということでしょうか??
76
+
77
+ はい。
78
+
79
+
80
+
81
+ - type(SigningKey) とやるとtype型が出るということでしょうか,
82
+
83
+ はい。
84
+
85
+
86
+
87
+ - "SigningKey().メソッド名"と書いていないのにもかかわらず,なぜ上のような使い方ができるのでしょうか??
88
+
89
+ generateはSigningKeyのクラスメソッドだからです。
90
+
91
+
92
+
93
+ クラスメソッドについては公式ドキュメントの[@classmethod](https://docs.python.org/ja/3/library/functions.html?highlight=classmethod#classmethod)に書いてありますが、あまりわかりやすくないですね。
94
+
95
+
96
+
97
+ 以下の例で理解してください。
98
+
99
+
100
+
101
+ ```python
102
+
103
+ >>> class C:
104
+
105
+ ... @classmethod
106
+
107
+ ... def hello(cls, name):
108
+
109
+ ... print(f'from {cls}: hello {name}')
110
+
111
+ ...
112
+
113
+ >>> C.hello('John')
114
+
115
+ from <class '__main__.C'>: hello John
116
+
117
+ >>> print(C.hello)
118
+
119
+ <bound method C.hello of <class '__main__.C'>>
120
+
121
+ >>> print(SigningKey.generate)
122
+
123
+ <bound method SigningKey.generate of <class 'ecdsa.keys.SigningKey'>>
124
+
125
+ >>> type(C.hello) is type(SigningKey.generate)
126
+
127
+ True
128
+
129
+ ```

1

例を追加

2021/03/29 13:22

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -1,3 +1,49 @@
1
1
  直接には、SigningKeyのクラスがtypeであるという意味です。
2
2
 
3
3
  typeはクラスのクラスなので、SigningKeyがクラスであるという意味になります。
4
+
5
+
6
+
7
+ 以下を見て理解して下さい。
8
+
9
+
10
+
11
+ type(x)はx.__class__と同じになります。
12
+
13
+
14
+
15
+ ```python
16
+
17
+ >>> print(type(1.0))
18
+
19
+ <class 'float'>
20
+
21
+ >>> print(1.0.__class__)
22
+
23
+ <class 'float'>
24
+
25
+ >>> print(type('a'))
26
+
27
+ <class 'str'>
28
+
29
+ >>> print('a'.__class__)
30
+
31
+ <class 'str'>
32
+
33
+ >>> print(type(float))
34
+
35
+ <class 'type'>
36
+
37
+ >>> print(float.__class__)
38
+
39
+ <class 'type'>
40
+
41
+ >>> print(type(str))
42
+
43
+ <class 'type'>
44
+
45
+ >>> print(str.__class__)
46
+
47
+ <class 'type'>
48
+
49
+ ```