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

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

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

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

Q&A

解決済

2回答

2120閲覧

Pythonの@classmethodの意味と使い方を知りたい

Jun1971

総合スコア9

Python

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

0グッド

0クリップ

投稿2020/11/14 12:03

編集2020/11/14 12:25

Pythonの@classmethodの意味がよくわかりません。インスタンスを生成しなくても呼び出せるということはどういうことですか? 第一引数にclsをつけるということは解ります。

class Area: @classmethod def circle(cls, radius): return radius * radius * 3.14 if __name__ == '__main__': print(Area.circle(10)) # 314.0 a = Area() print(a.circle(10)) # 314.0

Pythonの本を読んで調べたのですが、完璧に解りませんでした。だれか@classmethodについて教えて下さい。

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

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

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

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

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

guest

回答2

0

ベストアンサー

全体的な回答:
classmethodはまず使うことがないので、もっと大事なことのために時間を使いましょう。
本当に必要になった時に勉強すれば十分です。

部分回答:インスタンスを生成しなくても呼び出せるということはどういうことですか?
通常のメソッドは、インスタンスから呼び出さないといけませんが、クラスメソッドはクラス名を指定すれば呼び出すことができます。

以下の例を見てください。

python

1>>> class SPAM(): 2... favorite = 'spam' 3... hatred = 'dead parot' 4... def whatdoyoudislike(self): 5... print('We hate', self.hatred, '!!') 6... @classmethod 7... def whatdoyoulike(cls): 8... print('We love', cls.favorite, '!!') 9... 10>>> 11>>> SPAM.whatdoyoulike() 12We love spam !! 13>>> SPAM.whatdoyoudislike() 14Traceback (most recent call last): 15 File "<stdin>", line 1, in <module> 16TypeError: whatdoyoudislike() missing 1 required positional argument: 'self' 17>>> spam = SPAM() 18>>> spam.whatdoyoudislike() 19We hate dead parot !!

部分回答:クラスメソッドの使い方

抽象基底クラスの定義をするときなどに使いますが、普通にプログラミングしている場合にはまず使う必要がありません。

投稿2020/11/29 02:10

ppaul

総合スコア24670

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

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

Jun1971

2020/11/30 12:38

今の自分では@classmethodを完全に理解するのは困難だと思いました。これから時間をかけて経験を 積んで理解できるようにしたいと思います。これからもPythonのCUIから基本を積んでいきたいと思い ます。
guest

0

クラスメソッドの説明は公式ドキュメントの以下にあります。

組み込み関数 @classmethod

標準型の階層 節の一番最後

後者の説明がわかりやすいです。「クラスメソッドオブジェクトは、静的メソッドオブジェクトに似て、別のオブジェクトを包むラッパであり、そのオブジェクトをクラスやクラスインスタンスから取り出す方法を代替します。このようにして取得したクラスメソッドオブジェクトの動作については、上の "ユーザ定義メソッド (user-defined method)" で説明されています。クラスメソッドオブジェクトは組み込みのコンストラクタ classmethod() で生成されます。」

要するにラッパであり、関数などのオブジェクトをクラスを経由してアクセスするようにしたものです。

クラスに深く関係あるけれども、特定のインスタンスには結びつかないような、関数オブジェクトを表すのに、使います。以下に例示しますので参考にしてください。

例:意味合い的に特定インスタンスとは結びつかない関数をクラスメソッドとする

Python

1class MyObject: 2 @classmethod 3 def load(cls, filename): # o = MyObject.load('file.dat') ファイルからロードする前にはインスタンスは無い 4 5 def save(self, filename): # o.save('file.dat') 既にインスタンスがあるからセーブできる

例:似たような役割のサポート関数群を、グローバルに置かずにクラス内にまとめてスコープを管理する

Python

1class UtilityFunc: 2 @classmethod 3 def benri_func1(cls, parameter): 4 @calssmethod 5 def benri_func2(cls, parameter):

投稿2020/11/14 12:42

編集2020/11/15 00:58
toast-uz

総合スコア3266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問