python - 如何在两个不同的实例之间共享变量

python - how to share variables between two different instances

我看到很多帖子展示了如何通过继承访问常量值。那不是我的情况。
我想从两个不同的模块创建两个实例,并能够在它们之间共享 information/variables。
两个问题:
1. 类 "dont know" 彼此,因为它们在不同的文件上,"import"将它们作为模块在这种情况下没有多大帮助
2. "print_class" 实例如何访问和更改 "cal_class" 实例中变量的值?

请注意,我正在寻找一种从一个实例到另一个实例访问值的方法。 (在我的例子中,有大量信息(excel 表)在实例之间传递,通过 "main" 函数传递参数是不切实际的)

这是我的简化问题:

cal_class_file.py

class cal_class:
    def add(self,first,second)
        self.result= first + second

print_class_file.py

class print_class:
    def print_sum(self):
       result_from_cal_class = ?? <=-# How to get the value from local_calculate.result?
       print(result_from_cal_class)

main.py

import cal_class_file
import print_class_file

def main():
    local_calculate = cal_class_file.cal_class() # create instance
    local_print = print_class_file.print_class(); # create instance that reads values from "local_calculate" instance

    local_calculate.add(5,6) # calculate addition
    local_print.print_sum() # output: 11

    local_calculate.add(4,5) # update values in "local_calculate" instance
    local_print.print_sum() # output: 9

如何获取 "result_from_cal_class" 的当前(最新)值?

传递值。您在客户端代码中就拥有它:

class print_class:
    def print_sum(self, result_from_cal_class):
       print(result_from_cal_class)

def main():
    local_calculate = cal_class_file.cal_class() # create instance
    local_print = print_class_file.print_class(); # create instance that reads values from "local_calculate" instance

    local_calculate.add(5, 6) # calculate addition
    local_print.print_sum(local_calculate.result) # output: 11

    local_calculate.add(4, 5) # update values in "local_calculate" instance
    local_print.print_sum(local_calculate.result) # output: 9

输出:

11
9

但是,如果您的意思是您的客户这样做:

def main():
    # setup elided ...

    # actually call to add is done in another function
    local_calculate.add(5, 6) # calculate addition

    # actually call to print_sum is done somewhere else:
    local_print.print_sum() # output: 11

您可以这样定义 print_class

class print_class:
    def __init__(self, calculator):
        self.calculator = calculator
    def print_sum(self):
       print(self.calculator.result)

然后像这样初始化它:

def main():
    local_calculate = cal_class_file.cal_class() # create instance
    local_print = print_class_file.print_class(local_calculate); # create instance that reads values from "local_calculate" instance

小心,因为这有点像拥有一个全局变量:计算做某事,留下一个结果,打印获取最后一个结果。

如果你有一个意想不到的调用来计算你想要的和打印出来的,你会得到意想不到的结果。