我用类变量代替避免使用全局变量,但我觉得这不是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的。此外,它非常易于设置,阅读和理解 - 所以为什么不呢。