有没有一种pythonic方法来替换全局变量或类变量



我用类变量代替避免使用全局变量,但我觉得这不是pythonic的方式,谁能给我更好的方法?

类变量方式:

class A(object):
_func_map=dynamic_load_from_module()
_ad_map = dynamic_load_from_another_module()
@classmethod
def check_status(cls,host,port,user):
#do something other
return cls._func_map[user].verify()
@classmethod
def check_ad(cls,host,port,user):
#do something other
return cls._ad_map[user].check()

全局变量方式:

_global_func_map = dynamic_load_from_module()
_global_ad_map = dynamic_load_from_another_module()
def check_status(host,port,user):
#do something other
global _global_func_map 
return _global_func_map[user].verify()
def check_ad(host,port,user):
#do something other
global _ad_map
return _ad_map[user].check()

我想最python的方式是一个模块:

#!/usr/env/bin/python
def dynamic_load_from_module(): pass
def dynamic_load_from_another_module(): pass
fun_map = dynamic_load_from_module()
ad_map = dynamic_load_from_another_module()

所以你把它当作一个模块来使用:

from module import fun_map, ad_map
class Foo(object):
@classmethod
def check_ad(cls,host,port,user):
return ad_map[user].check()

但是,如果您需要在构建实例时调用它们,则可能需要执行类似操作

#!/usr/env/bin/python
def dynamic_load_from_module(): pass
def dynamic_load_from_another_module(): pass

(所以你只需在模块中定义函数(

from module import dynamic_load_from_module, dynamic_load_from_another_module
class Foo(object):
def __init__(self):
self._fun_map = dynamic_load_from_module()
self._ad_map = dynamic_load_from_another_module()

或者,如果您需要在实例构造时调用它们,但仍然是类的属性:

from module import dynamic_load_from_module, dynamic_load_from_another_module
class Foo(object):
_fun_map = dynamic_load_from_module()
_ad_map = dynamic_load_from_another_module()

还有很多其他方法(属性、类方法、静态方法等(,但我很确定该模块是最pythonic的。此外,它非常易于设置,阅读和理解 - 所以为什么不呢。

相关内容

  • 没有找到相关文章

最新更新