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>如果您想要一个只有一个实例的<code>logger</code>类,只需将它作为一个单独的模块。在</p> <pre><code># In logging.py def log(msg): print msg </code></pre> <p>然后从任何你想登录的脚本。在</p> ^{2}$
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
为什么我的神经网络模型的准确性不能在这个训练集上得到提高?
5 回答
为什么我的神经网络模型的权重变化不大?
2 回答
为什么我的神经网络的成本不断增加?
2 回答
为什么我的神经网络的输入pickle文件是19GB?
8 回答
为什么我的神经网络给属性错误?“非类型”对象没有属性“形状”
9 回答
为什么我的神经网络训练这么慢?
7 回答
为什么我的神经网络输出错误?
9 回答
为什么我的神经网络预测适用于MNIST手绘图像时是正确的,而适用于我自己的手绘图像时是不正确的?
9 回答
为什么我的神经网络验证精度比我的训练精度高,而且它们都是常数?
7 回答
为什么我的私人用户间聊天会显示在其他用户的聊天档案中?
2 回答
为什么我的积分的绝对误差估计值大于积分(使用scipy.integrate.nqad)?
8 回答
为什么我的积层回归器得分比它的组件差?
9 回答
为什么我的移动方法不起作用?
8 回答
为什么我的稀疏张量不能转换成张量
4 回答
为什么我的稀疏张量不能转换成张量?
9 回答
为什么我的程序“停止”了?
10 回答
为什么我的程序一直试图占用所有可用的CPU
2 回答
为什么我的程序不使用指定的代理
8 回答
为什么我的程序不工作(python帮助中的反向函数)?
2 回答
为什么我的程序不工作时,我使用多处理模块
6 回答