0

次のクラスを検討してください。

from global_vars import Vars
from aud_lib import lib_class
from aud_lib2 import lib_class2

class test(lib_class, lib_class2):

    def __init__(self):
        self.Variables = Vars
        self.step()
        self.main_fun()

    def step(self):
        print("Before Lib1 Call - main")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

        self.lib_func()

        print("After Lib1 Call - main")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

        self.lib_func2()

        print("After Lib2 Call - main")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

    def main_fun(self):
        print("After Libs Call")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var)) 

global_vars.py には以下が含まれます。

class Vars:
    glo_path = 'my_path'
    glo_var = 1

aud_lib.py には以下が含まれます。

class lib_class(object):
    def __init__(self):
        self.Variables = object.Variables

    def lib_func(self):
        print("Inside Lib1 Call [Before Modification]")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

        self.Variables.glo_path = 'My lib1 Path'
        self.Variables.glo_var = 3

        print("Inside Lib1 Call [After Modification]")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

aud_lib2.py には以下が含まれます。

class lib_class2(object):
    def __init__(self):
        self.Variables = object.Variables

    def lib_func2(self):
        print("Inside Lib2 Call [Before Modification]")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

        self.Variables.glo_path = 'My lib2 Path'
        self.Variables.glo_var = 5

        print("Inside Lib2 Call [After Modification]")
        print("Path: " + self.Variables.glo_path)
        print("Var: " + str(self.Variables.glo_var))

を呼び出すtest()と、次の出力が生成されます (予想)。

Before Lib1 Call - main
 Path: my_path
 Var: 1
Inside Lib1 Call [Before Modification]
 Path: my_path
 Var: 1
Inside Lib1 Call [After Modification]
 Path: My lib1 Path
 Var: 3
After Lib1 Call - main
 Path: My lib1 Path
 Var: 3
Inside Lib2 Call [Before Modification]
 Path: My lib1 Path
 Var: 3
Inside Lib2 Call [After Modification]
 Path: My lib2 Path
 Var: 5
After Lib2 Call - main
 Path: My lib2 Path
 Var: 5
After Libs Call
 Path: My lib2 Path
 Var: 5

Process finished with exit code 0

コードは期待どおりに動作し、 class の変数の値を変更できますが、なぜそれが機能するのか、特にlib クラスでのの使用がVarsわかりません。object.Variables

また、元のtestクラスが拡張されていないlib_classと機能しないことに気付きましたlib_class2

私は何が欠けていますか?

4

0 に答える 0