0

Python 3.9.10を使っています。

class cls_Common(object):
def __init__(略)
    以下略

def Process_A():・・・①
    以下略

def Process_B():
    前略

    self.Process_A():

    以下略


class cls_main(cls_Common):
def __init__(略)
    super().__init__(略)
    以下略

def Process_Z():
    super().Process_B():
    以下略

def Process_A():・・・②
    以下略


というクラス定義をした上で、

if __name__ == '__main__':
    print_hi('PyCharm')
CLS = cls_main(略)
CLS.Process_Z() ・・・③

とした場合、Process_Aは、最終的に②が呼ばれるのではないかと思います。
③のような場所から呼び出す前提で、Process_B内(またはcls_Common内)に何らかの処理(条件分岐など)を埋め込むことで、Process_Aの①、②を呼び分けることは可能ですか?

よろしくお願いいたします。

BrainOverflow
  • 312
  • 2
  • 14

1 Answers1

0

やりたい事と合っているか分かりませんが、以下のように単純にcls_Common側に変数/パラメータ/メソッドを定義して、それを元に呼び出し先を変更出来ると思われます。
変数はクラス/グローバル変数などでも出来るでしょうから、お好みで。

class cls_Common(object):
    def __init__(self):
        self.rootmode = False    #### インスタンスにモード変数(例えばbool型)を定義して初期化
        print('Common.Init')
def Process_A(self):
    print('Common.ProcessA')

def Process_B(self):
    print('Common.ProcessB')
    if self.rootmode:       #### インスタンスのモード変数に応じて呼び先変更
        cls_Common.Process_A(self)
    else:
        self.Process_A()

def Process_C(self, root):  #### モードを指定するパラメータを定義
    print('Common.ProcessC')
    if root:                #### 指定されたパラメータに応じて呼び先変更
        cls_Common.Process_A(self)
    else:
        self.Process_A()

def Process_M(self, mode):  #### インスタンスのモード変数を変更するメソッド
    self.rootmode = mode
    print('Common.ProcessM')

class cls_main(cls_Common): def init(self): super().init() print('Main.Init')

def Process_Z(self):
    print('Main.ProcessZ')
    super().Process_B()

def Process_A(self):
    print('Main.ProcessA')

def Process_Y(self, root):  #### パラメータを指定して呼び出すメソッド追加
    print('Main.ProcessY')
    super().Process_C(root)

if name == 'main': CLS = cls_main() print('-----------0') CLS.Process_Z() print('-----------1') CLS.Process_M(True) #### cls_main側に対応するメソッドを追加しても良いがここでは直接呼出し print('-----------2') CLS.Process_Z() print('-----------3') CLS.Process_Y(False) print('-----------4') CLS.Process_Y(True) print('-----------5')

kunif
  • 17,469
  • 3
  • 17
  • 28
  • 回答ありがとうございました。反応が遅くなりすみません。こまめにやるしかないようですね。(派生先から呼ぶときは、super(). みたいなのがありますが、、、) –  BrainOverflow Mar 14 '22 at 00:48