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
小心,因为这有点像拥有一个全局变量:计算做某事,留下一个结果,打印获取最后一个结果。
如果你有一个意想不到的调用来计算你想要的和打印出来的,你会得到意想不到的结果。
我看到很多帖子展示了如何通过继承访问常量值。那不是我的情况。
我想从两个不同的模块创建两个实例,并能够在它们之间共享 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
小心,因为这有点像拥有一个全局变量:计算做某事,留下一个结果,打印获取最后一个结果。
如果你有一个意想不到的调用来计算你想要的和打印出来的,你会得到意想不到的结果。