【问题标题】:python - how to share variables between two different instancespython - 如何在两个不同的实例之间共享变量
【发布时间】:2018-04-23 14:52:19
【问题描述】:

我看到很多帖子展示了如何通过继承访问常量值。那不是我的情况。
我想从两个不同的模块创建两个实例,并能够在它们之间共享信息/变量。
两个问题:
1. 类彼此“不认识”,因为它们位于不同的文件中,在这种情况下将它们作为模块“导入”并没有多大帮助
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”的当前(最新)值?

【问题讨论】:

    标签: python class instance-variables python-module


    【解决方案1】:

    将值传入。您的客户端代码中就有它:

    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
    

    小心,因为这有点像拥有一个全局变量:calculate 做某事,留下一个结果,print 拾取最后一个结果。

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

    【讨论】:

    • 谢谢,第一个解决方案只适用于这个例子,但对我的实际项目来说并不实用,通过主函数传递参数/值,因为我有分配的数据要处理(> 200mb表),每个表都有点不同。此外,还有更多的实例和类。在多个实例之间传递类似的值将使表的分析自动化变得非常困难。我需要尝试应用您的第二个解决方案,看看它对我是否实用。
    • 像魅力一样工作。谢谢quamrana
    猜你喜欢
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多