zoukankan      html  css  js  c++  java
  • python-跨文件的全局变量,该如何是好

    一、设置一个类,存放全局数据

    class GlobalVar:
    
      def __init__(self):
      	self.DB_CONFIG = {}
        self.table_name = '' # 表名
    	...
    

    调用时,从主模块中,创建实例:

    def main(self):
    	gv = GlobalVar()
    	gv.table_name = 'user'
    	# 当其它类中,需要使用某个全局变量时,通过函数的参数,传递gv过去:
    	decl_func.get_auto_increment(gv,field)
    

    在decl_func中这样定义:

    def get_auto_increment(gv,field):
      table = gv.table_name
    

    这种方式的缺点是,所有其它文件中,使用全局变量,必须调用主模块中的创建的唯一实例。如果某模块不是直接被主模块调用的,而又需要使用全局变量,就得一层层调用,或者写额外的接口。增加麻烦。

    二、get/set方式:

    首先创建个全局模块:globalVar.py

    #!/usr/bin/env python 
    # -*- coding: utf-8 -*- 
    
    def _init():
        global _global_dict
        _global_dict = {}
    
    def set_value(name, value):
        _global_dict[name] = value   
    
    def get_value(name, defValue=None):
      try:
      return _global_dict[name]
        except KeyError:
      return defValue
    
    

    在需要使用全局变量的文件中引入:
    import common.globalVar as gl

    但看上去写代码麻烦了一点,一点也不优雅,写一半,看不下去,放弃了。

    三、简洁最美:

    首先创建个全局模块:global_var.py

    #调用方法: 
    #import  global_var as gl 
    #gl.table_name = 'hhh'
    
    DB_CONFIG = {}
    table_name = '' # 表名
    

    在需要使用全局变量的文件中引入:
    import common.global_var as gl
    然后直接操作gl就行

    from common import prase,check,config
    import common.global_var as gl
    
    def load():
      """载入各种标签的值,并且检查错误"""
      gl.DB_CONFIG = get_connect_dict(gl.file_name, gl.data)
    
       gl.table_name = prase.prase_table(gl.data)
       if gl.table_name == '':
      gl.msg = gl.file_name +':没有table标签。
    '
      return False
    
  • 相关阅读:
    JavaScript Patterns 5.7 Object Constants
    JavaScript Patterns 5.6 Static Members
    JavaScript Patterns 5.5 Sandbox Pattern
    JavaScript Patterns 5.4 Module Pattern
    JavaScript Patterns 5.3 Private Properties and Methods
    JavaScript Patterns 5.2 Declaring Dependencies
    JavaScript Patterns 5.1 Namespace Pattern
    JavaScript Patterns 4.10 Curry
    【Android】如何快速构建Android Demo
    【Android】如何实现ButterKnife
  • 原文地址:https://www.cnblogs.com/dreamfine/p/8410348.html
Copyright © 2011-2022 走看看