質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1060閲覧

pythonのクラスメソッドとインスタンスメソッドの違い

soma21

総合スコア18

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/01/11 07:28

編集2019/01/11 07:55

pythonのクラスメソッドとインスタンスメソッドについてイマイチ違いがイメージできません。
わかりやすいイメージで例えるとどのような違いがありますか?

依頼ありがとうございます。

ある本を読んでいて、コンストラクタの説明がありその説明によるとコンストラクタとはインスタンスを生成する物だと書いてありました。
コンストラクタでインスタンスを生成して変数に代入し、その変数に対してインスタンスメソッドを使用するというのはわかります。クラスメソッドもインスタンスメソッドもインスタンスに対して使用するものではないのですか?そこの違いがわかりません。
クラスとインスタンスの違いは理解してるつもりです…

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

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

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

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

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

LouiS0616

2019/01/11 07:31 編集

現状理解できていることを追記してください。 自らの言葉で語ることが大事なので、必ずしも厳密な説明で無くても構いません。
hayataka2049

2019/01/11 07:31

これだと回答しづらいので、現状でどんなふうに理解しているのかをできるだけ詳しく書いてください。 クラスとインスタンスの違いはわかりますか?
guest

回答2

0

ベストアンサー

クラスメソッドとインスタンスメソッドの使い分けとしては、クラスに対する操作はクラスメソッドで、インスタンスに対する操作はインスタンスメソッドで行うということになります。

クラスメソッドもインスタンスメソッドもインスタンスに対して使用する

確かにどちらもインスタンス「から」呼べますが、python的には第一引数に何が渡されるかが異なります(他の言語だと違う仕組みを使っています)。

python

1>>> class Class: 2... def instancemethod_of_Class(x): 3... print(x) 4... @classmethod 5... def classmethod_of_Class(x): 6... print(x) 7... 8>>> c = Class() 9>>> Class 10<class '__main__.Class'> 11>>> c 12<__main__.Class object at 0x7fecc3289cf8> 13>>> c.instancemethod_of_Class() 14<__main__.Class object at 0x7fecc3289cf8> 15>>> c.classmethod_of_Class() 16<class '__main__.Class'>

投稿2019/01/11 08:01

hayataka2049

総合スコア30933

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

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

soma21

2019/01/12 06:40

詳しくありがとうございました。
guest

0

クラスメソッドもインスタンスメソッドもインスタンスに対して使用するものではないのですか?

クラスメソッドは、インスタンスに対して『も』使うことができるだけです。

Python

1class Spam: 2 @classmethod 3 def class_method(cls): 4 print(cls) 5 6 def instance_method(self): 7 print(self) 8 9 10s = Spam() 11 12s.class_method() 13s.instance_method() 14 15Spam.class_method() 16Spam.instance_method()

実行結果 Wandbox

<class '__main__.Spam'> <__main__.Spam object at 0x7f3786cf6f98> <class '__main__.Spam'> Traceback (most recent call last): File "prog.py", line 16, in <module> Spam.instance_method() TypeError: instance_method() missing 1 required positional argument: 'self'

投稿2019/01/11 07:58

LouiS0616

総合スコア35660

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

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

soma21

2019/01/12 06:40

詳しくありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問