在外部函数和python类函数之间共享数据

2024-10-04 01:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python类中定义的函数和外部定义的函数之间共享一个变量值。在下面的代码中,当调用internalCompute()函数时,自我数据已更新。如何在类外部(即报表函数内部)定义的函数中访问此更新的数据值? 注意: 我希望尽可能避免使用全局变量。

   class Compute(object):

      def __init__(self):
         self.data = 0

       def internalCompute(self):
          self.data = 5

   def externalCompute():
      q = Compute()
      q.internalCompute()

   def report():
      # access the updated variable self.data from Compute class
      print "You entered report"

   externalCompute()
   report() 

Tags: 数据函数代码selfreportdata定义object
3条回答

避免使用magic globals是个好主意,但是您的report()函数必须有一些方法来知道应该在哪里查找。如果可以将执行计算的对象传递给它,即q,它可以简单地打印出q.data。如果不是,那么您可以安排q将其数据保存在类本身中显然这意味着类只能实例化一次,因此我将使用第一个选项。你知道吗

除非在某个地方实例化类,否则不能这样做。 当前在您的实现中,您将在此处实例化Compute类:

def externalCompute():
  q = Compute()
  q.internalCompute()

但是一旦函数完成q就会超出范围并被销毁,因此您将丢失类包含的所有信息。为了做你想做的事情,Compute类必须被实例化为不是函数的本地类(或者你的函数需要返回Compute类的实例以保持它的状态)

通常,如果您的python文件是这样的,那么您可以使用一个“main”来实现:

   class Compute(object):

      def __init__(self):
         self.data = 0

       def internalCompute(self):
          self.data = 5

   def externalCompute(q):
      q.internalCompute()

   def report(q):
      # access the updated variable self.data from Compute class
      data = q.data
      print "You entered report"

if __name__ == '__main__':
   q = Compute()
   externalCompute(q)
   report(q) 

实际上,您可以通过q.data访问数据,您只需返回它。你知道吗

更改代码以反映这一事实:

 class Compute(object):

    def __init__(self):
       self.data = 0

    def internalCompute(self):
       self.data = 5

    def externalCompute():
       q = Compute()
       q.internalCompute()
       return q.data

    def report():
       print externalCompute()

    report() # 5

如果你不喜欢这种方法,你只有几个其他的选择:

  • 全局变量。你知道吗
  • 实例化另一个类。你知道吗
  • 正在更新实例化的同一个类。你知道吗
  • 数据库。你知道吗
  • 泡菜。你知道吗

相关问题 更多 >