直接には、SigningKeyのクラスがtypeであるという意味です。
typeはクラスのクラスなので、SigningKeyがクラスであるという意味になります。
以下を見て理解して下さい。
type(x)はx.__class__と同じになります。
python
1>>> print(type(1.0))
2<class 'float'>
3>>> print(1.0.__class__)
4<class 'float'>
5>>> print(type('a'))
6<class 'str'>
7>>> print('a'.__class__)
8<class 'str'>
9>>> print(type(float))
10<class 'type'>
11>>> print(float.__class__)
12<class 'type'>
13>>> print(type(str))
14<class 'type'>
15>>> print(str.__class__)
16<class 'type'>
追加質問への回答です。
- "typeはクラスのクラス" とはどういうことでしょうか??
Pythonではすべてはオブジェクトです。
すべてのオブジェクトはクラスを持ちます。
1.0という浮動小数のクラスはfloatであり、それを調べるためには、type(float)を使うか、1.0.__class__を使います。
type(float)はtypeというクラスです。
詳しくは公式ドキュメントのclass typeを読んでください。
- SignigKey()とSigningKeyの場合,前者がオブジェクト(インスタンス)で,SigningKeyがクラスということでしょうか??
はい。
- type(SigningKey) とやるとtype型が出るということでしょうか,
はい。
- "SigningKey().メソッド名"と書いていないのにもかかわらず,なぜ上のような使い方ができるのでしょうか??
generateはSigningKeyのクラスメソッドだからです。
クラスメソッドについては公式ドキュメントの@classmethodに書いてありますが、あまりわかりやすくないですね。
以下の例で理解してください。
python
1>>> class C:
2... @classmethod
3... def hello(cls, name):
4... print(f'from {cls}: hello {name}')
5...
6>>> C.hello('John')
7from <class '__main__.C'>: hello John
8>>> print(C.hello)
9<bound method C.hello of <class '__main__.C'>>
10>>> print(SigningKey.generate)
11<bound method SigningKey.generate of <class 'ecdsa.keys.SigningKey'>>
12>>> type(C.hello) is type(SigningKey.generate)
13True
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 12:42 編集
2021/03/29 13:22
2021/03/29 17:37
2021/03/30 01:23 編集
2021/03/30 01:26