投稿/コメントを表示します。

藤本 博子さんの投稿

(投稿ID: 5419)

クラスメソッドについて確認したいことがあります。
お手数をおかけしますが、どうぞよろしくお願いいたします。

※クラスとインスタンスのread.mdのサンプルコードP9とサンプルコード「part09_43_class_method.py」21行目にかかれた、インスタンス変数でクラスメソッドを実行しているコードについて

生成したインスタンス「silver」を@classmethod def get_asset_type(cls):を実行するメソッドがかかれています。
print(silver.get_asset_type())

・クラスメソッドはクラスをインスタンス化せずに実行するメソッド
動画でも、class Metalでメソッドを実行するデモでした。
しかし、サンプルコードとread.mdには上記のメソッドが書かれてました。

・インスタンス変数(silver)を生成したときは、コンストラクタで属性を初期化するか、
インスタンスメソッドを使用すると理解してました。
 (1)__init__メソッドのコンストラクタでasset_typeを引数type_nameの値で設定する
 (2)もしくは、インスタンスメソッド(第一引数self)で設定

インスタンス変数に対して、クラスメソッドを実行することがあるのかな…と思ったため、ご教示いただけると、ありがたいです。

・Metal.set_asset_type('地金')の式を実行しても、インスタンス変数でsilverのasset_typeの属性を"silver"で設定した値が維持される。
・インスタンス変数silverでクラスメソッドを実行すると、クラスメソッドで設定した属性が設定される。
print(f'Metal.get_asset_typeは、{Metal.get_asset_type()}')  #地金
print(f'silver.asset_typeは、{silver.asset_type}')  #silver
print(f'silver.get_asset_type()は、{silver.get_asset_type()}')  #地金

Metal.get_asset_typeは、地金
silver.asset_typeは、silver
silver.get_asset_type()は、地金

お手数をおかけしますが、どうぞよろしくお願いいたします。
2022/11/19 16:45