Python中类实例对象的创建位置:以redisProducer为例
RedisProducer实例的最佳创建位置
针对你的代码场景,推荐按以下方式处理:
实例创建在
if __name__ == "__main__"代码块内
这里是脚本的入口点,只有当脚本直接运行时才会执行这块代码,避免模块被其他脚本导入时意外创建Redis连接实例,节省不必要的资源占用。通过参数传递给
main(),再由main()传递给foo()
放弃全局变量的写法,通过参数传递能降低代码耦合度,同时大幅提升可测试性——比如写单元测试时,可以轻松传入Mock的RedisProducer实例,不用改动核心业务代码。
修改后的代码示例:
from redisUtil import redisProducer def foo(redis_producer): redis_producer.get_data() ... def main(redis_producer): while True: if # certain condition foo(redis_producer) ... if __name__ == "__main__": redis_producer = redisProducer() main(redis_producer)
为什么不选其他方式?
- 全局作用域创建实例:模块被其他脚本导入时会自动执行实例化逻辑,提前建立Redis连接,既浪费资源又可能引发意外的连接问题。
- main()内部创建但用全局变量:全局变量会让代码耦合度变高,后续维护、测试都不方便,比如想替换实例时要修改全局变量,容易引发连锁错误。
内容的提问来源于stack exchange,提问作者TungTung
相关产品推荐
相关产品推荐

