クラスメソッド(補足)
インスタンスメソッドからのクラスメソッドの利用
code:classmeth21.py
class Myclass:
@classmethod
def method_class(cls):
print('クラスメソッドが呼び出されました')
def method_instance(self):
print('インスタンスメソッドが呼び出されました')
Myclass.method_class() # (1)
m1 = Myclass()
m1.method_instance()
(1)のように、クラス名を用いてスコープを指定する必要がある。
クラスメソッドからのインスタンスメソッドの利用
クラスメソッドにインスタンスのオブジェクトIDを渡すことで実現します。どんな用途があるかはさておき、これが読めればオブジェクトの仕組みの理解が深まっているといえます。
code:classmeth22.py
class Myclass:
@classmethod
def method_class(cls, inst): # (1)
print('クラスメソッドが呼び出されました')
inst.method_instance()
def method_instance(cls):
print('インスタンスメソッドが呼び出されました')
m1 = Myclass()
Myclass.method_class(m1)
(1)で、仮引数instにグローバル変数のm1に格納されたインスタンスのオブジェクトIDが渡される。
「書いたとおりに動作している」という印象です。