Python中文
首页
教程
问答
标签
搜索
登录
注册
Python中的全局变量和单例对象
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一些在Python应用程序中广泛使用的类,它们应该只有一个全局实例(例如Logger、DbConnection)。Python不支持类中的静态变量/方法,所以通常使用java /C++方式创建一个单独的单元格是行不通的。我已经找到了在Python中实现singleton的替代方法。我想要一个简单(没有元编程,如果可能)和干净的实现。这看起来不错:</p> <pre><code>class MyClass(object): def a(): pass singleton = MyClass() </code></pre> <p>使用singleton很简单</p> ^{pr2}$ <p>如果对象初始化不是那么简单,直接赋值可以用创建函数代替。在</p> <p>我还可以在模块范围内创建一个getInstance(),并始终使用它来获取myObj。在</p> <p>问题1)这行得通吗?模块代码(myObj赋值)只在第一次导入其他模块时运行,而myObj不会在每次我将该模块导入某个地方时创建?在</p> <p>我见过的另一种方法是使用globals模块。比如:</p> <pre><code>from myClass1 import MyClass1 from myClass2 import MyClass2 myObj1 = MyClass1() myObj2 = MyClass2() </code></pre> <p>使用这个:</p> <pre><code>import globals globals.myObj1.a() </code></pre> <p>我倾向于选择第一种。在</p> <p>问题2)在这两种解决方案中,你有什么建议?在</p> <p>问题3)第三种解决方案是将广泛使用的对象(如Logger)传递给多个类/函数,但这在imho中不是一个好的解决方案。有没有更好的解决方案没有提到这里?在</p> <p>我知道使用全局变量和单变量的缺点。然而,在我的应用程序中,拥有全局状态并不是一个大问题。我更喜欢代码清晰且易于使用的解决方案。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>正确的答案是如何使单身?不要。你应该显式地传递一个引用给所有需要使用它的对象。您可以使用工厂函数、包装类等来减少工作量。在</p> <p>即使有一些东西,比如屏幕或记录器是全局性的,您仍然应该显式地传递它以允许单元测试。注意,这只适用于最终设计的一部分。如果您的日志只是一个快速的调试黑客,请随意使其全球化。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
使用urllib2进行Web抓取
3 回答
使用urllib2进行Web报废
8 回答
使用urllib2进行简单https身份验证时出现问题(用于获取PayPal OAUTH承载令牌)
5 回答
使用urllib2进行节流
4 回答
使用urllib2远程读取pdf
6 回答
使用urllib2通过flask发送图像
5 回答
使用urllib2通过对等错误重置连接
9 回答
使用urllib2避免503个错误
7 回答
使用urllib2音调符号打开页面
2 回答
使用urllib3 UnicodeDecodeError上载文件
10 回答
使用urllib3.PoolManag时看到ClosedPoolError
7 回答
使用urllib3下载文件的最佳方式是什么
7 回答
使用urllib3下载网页
9 回答
使用urllib3忽略证书验证
4 回答
使用urllib3时的ssl.SSLError
1 回答
使用urllib3的TLS1.1的HTTP GET网站
10 回答
使用urllib3获取JSON d
2 回答
使用urllib3解析来自httpget请求的XML响应
4 回答
使用urllib3进行HTTPS调用时,请使用服务器的ssl证书而不是根CA证书
8 回答
使用urllib3进行多部分表单编码和发布
9 回答