可以使用全局变量来调用函数吗?

时间:2015-11-25 21:52:32

标签: python-2.7 variables module

SEFC.py:

import time
import traceback
import platform

sefc_verbose = False
obj_sefc = None

class CSEFC():

  def __init__(self):
      self.fp_platform = False
      self.bbu_platform = False
      return 

   def __del__(self):
      return

   def ipmi_cmd_trace(self):
       return False 

KCS.py:

import SEFC as sefc

class CKCS(CLogger):

  def __init__(self, str_ip = None, int_port = _DEFAULT_ATRAGON_PORT):
      CLogger.__init__(self)
      self.obj_json_client = None

   def send_ipmi_target(self, targetstr, raw_request, int_retry = 3):
       if sefc.obj_sefc.ipmi_cmd_trace():
        ##do stuff

我正在阅读其他人编写的代码。我似乎无法理解if sefc.obj_sefc.ipmi_cmd_trace(): obj_sefc用来调用ipmi_cmd_trace()函数。 sefc_obj是我相信的全局变量。但是这段代码不适用。另外,我怀疑我的编程能力。这段代码似乎可以编译并为其他人工作。它是否正确?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

只需显示您已经显示的代码,您就行了,但由于obj_sefc模块中NoneSEFC,因此无法正常工作。但是,我怀疑您还没有显示的其他代码会创建CSEFC类的实例并将其分配给该全局变量。然后,您显示的代码将起作用。

对于您已经证明依赖于其他一些代码的代码,它可能不是一个好的设计,因为如果它以错误的顺序运行它将会失败。但是,使用全局变量来包含类的单个实例通常不成问题。您只是想确保创建实例的代码放在某个位置,以确保在需要实例之前运行它。例如,代码可以放在SEFC模块的底部,也可以放在KCS模块的顶部。