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

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

新規登録して質問してみよう
ただいま回答率
85.47%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

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

Q&A

2回答

941閲覧

Pythonにおけるクラスメソッドについて

zzaa

総合スコア9

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

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

1グッド

2クリップ

投稿2020/08/16 18:03

#Pythonにおけるクラスメソッドについて
私の記事をお読みになってありがとうございます。Python入門ばかりでまだ未熟な人ではあります。わかる方どなたか教えていただけるとありがたいです。

解決したいこと:クラスメソッド、デコレーターとも呼ぶそうですが、こちらの考え方があまり理解できていません。

下記は勉強しているソースコードなのですが、どのように読み取ればいいのかがわかりません。どこからわからないかというと、@classmethodからです。
これの前に count = 0 という変数が何なのかもわかりません。これはクラス変数と捉えるべきでしょうか?

class User: count = 0   #コンストラクター (初期設定) def __init__(selfm name): User.count += 1 self.name = name #ここからがクラスメソッドになります。 @classmethod def show_info(cls): print('{0} instance value.'.format(cls.count)) user0 = User("a") user1 = User("b") user2 = User("c") User.show_info() #出力結果: 3 instance
miyabi_pudding👍を押しています

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

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

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

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

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

guest

回答2

0

例えばCarというクラスを考えます。自動車です。

私の車は30万円ですが、
あなたの車は100万円で、
隣の車は500万円かもしれません。

車のインスタンスごとに違うものはインスタンス変数に入れないといけませんが、車といえば普通タイヤの数は4つです。それはあなたの車も隣の車も私の車と同じ4つです。

このように、クラスさえ決まってしまえば、インスタンスごとに違わないものをクラス変数とし、クラスから直接使えるようにしたのがクラスメソッドで@classmethodデコレータです。

今説明した内容をコードにしたのが↓

python

1class Car: 2 countOfWheel = 4 3 4 def __init__(self, value): 5 self.value = value 6 7 def howMuch(self): 8 return self.value 9 10 @classmethod 11 def getCountOfWheel(cls): 12 return cls.countOfWheel 13 14myCar = Car(300000) 15yourCar = Car(1000000) 16nextCar = Car(5000000) 17 18print("私の車は" + str(myCar.howMuch()) + "円です。") 19print("あなたの車は" + str(yourCar.howMuch()) + "円です。") 20print("隣の車は" + str(nextCar.howMuch()) + "円です。") 21 22print("私の車のタイヤの数は" + str(myCar.getCountOfWheel()) + "です。") 23print("あなたの車のタイヤの数は" + str(yourCar.getCountOfWheel()) + "です。") 24print("隣の車のタイヤの数は" + str(nextCar.getCountOfWheel()) + "です。") 25print("車のタイヤの数は" + str(Car.getCountOfWheel()) + "です。") 26

投稿2020/08/18 12:32

dameo

総合スコア943

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

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

0

>どこからわからないかというと、@classmethodからです。
「関数show_infoはクラスメソッドです」という宣言ですね。

これによって、
>User.show_info()
のようにインスタンスがなくても、
(つまり、user0,user1,user2のようなインスタンスを使わずとも)
クラス名.関数名()
で利用できています。

>count = 0 という変数が何なのかもわかりません。これはクラス変数と捉えるべきでしょうか?

合っています。

投稿2020/08/16 22:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問