🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2039閲覧

<class 'type'> とはどういう意味でしょうか??

SunaSuna

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2021/03/29 12:06

<class 'type'> とはどういう意味でしょうか?

自分が作っていないパッケージをimportして使用する際,使っているものがクラスなのか,メソッドなのか,モジュールなのかを明確に区別したくて,type()を使って調べたのですが, "<class 'type'>" と出てきてしまいました.
公式ドキュメントを見たのですが,返り値でこのようなものは見つからなかったため質問いたします.
<class 'type'>とはどういうものなのか,どなたか回答いただけますでしょうか?

また, モジュール,クラス,メソッド,関数を見分けるために皆さんはどうしていますか??
教えていただいて,今後の勉強に活用したいです.
どうぞよろしくお願いいたします.

該当のソースコード

python

1>>> from ecdsa import SigningKey 2>>> type(SigningKey) 3<class 'type'> 4>>>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

直接には、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:23

編集2021/03/29 13:22
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SunaSuna

2021/03/29 12:42 編集

回答ありがとうございます. すみません."typeはクラスのクラス" とはどういうことでしょうか?? SignigKey()とSigningKeyの場合,前者がオブジェクト(インスタンス)で,SigningKeyがクラスということでしょうか?? だから,type(SigningKey) とやるとtype型が出るということでしょうか, そして,SigningKeyがクラスである場合,以下のような使い方はできないと思う(Signingkey()となっていないため)のですが,いかがでしょうか?? "SigningKey.generate(curve=NIST256p)" ←これが推奨されている使い方 "SigningKey().メソッド名"と書いていないのにもかかわらず,なぜ上のような使い方ができるのでしょうか?? ご質問が増えて申し訳ありません.お時間あれば教えていただけると幸いです.
ppaul

2021/03/29 13:22

回答を追加しました。
hayataka2049

2021/03/29 17:37

pythonで普通に「クラス」と言っているものは、通常は「typeクラスのインスタンス」という扱いにされている訳です。 (メタクラスという例外はあるにしろ)
SunaSuna

2021/03/30 01:23 編集

ppaulさん,hayataka2049さん,ありがとうございました. ppaulさんのpythonは全てがオブジェクトの言葉で今までの概念が結びついたような気がします!クラスメソッドもきっちり理解できました!オブジェクトを作る必要が無い時などに使えそうです???? お二方,どうもありがとうございます.感謝いたします.
SunaSuna

2021/03/30 01:26

hayataka2049さんの「typeクラスのインスタンス」という言葉にも納得感がありましたありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問