- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 python 的新手,我一直在读到使用 global
将变量传递给其他函数被认为是菜鸟,也是一种不好的做法。我想不再使用全局变量,但我不确定该怎么做。
现在我有一个在 wxPython 中创建的 UI 作为它自己的独立类,我还有另一个类从 .ini 文件加载设置。由于 UI 中的设置应与 .ini 中的设置相匹配,我该如何传递这些值?我可以使用类似的东西:Settings = Settings()
然后将变量定义为类似 self.settings1
的东西,但是我必须做 Settings
一个全局变量,用于将其传递给我的 UI 类(如果我在其中分配 main()
则不会)。
那么传递这些变量的正确和 pythonic 方法是什么?
编辑:这是我正在使用的代码,我正在努力让它像 Alex Martelli 的示例一样工作。以下代码保存在Settings.py
中:
import ConfigParser
class _Settings():
@property
def enableautodownload(self): return self._enableautodownload
def __init__(self):
self.config = ConfigParser.ConfigParser()
self.config.readfp(open('settings.ini'))
self._enableautodownload=self.config.getboolean('DLSettings', 'enableautodownload')
settings = _Settings()
每当我尝试从另一个文件引用 Settings.settings.enableautodownload
时,我都会得到:AttributeError: 'module' object has no attribute 'settings'
。我做错了什么?
编辑 2:别在意这个问题,我重新输入了代码,它现在可以工作了,所以它一定是一个简单的拼写或语法错误。
最佳答案
global
变量的替代方案有很多——主要是:
这些中的每一个(尤其是第一个和第三个)对于名称必须不被所有和杂项重新绑定(bind)但只能访问的值特别有用。 global
的真正大问题是它提供了一个“隐蔽的通信 channel ”(不是密码意义上的,而是字面上的:表面上独立的功能实际上可以相互依赖,相互影响,通过函数签名中不“明显”的全局值——这使得代码难以测试、调试、维护和理解)。
对于您的特定问题,如果您从不使用 global
语句,而是从任何地方以“只读”方式访问设置(并且您可以通过使所述对象的attributes 是只读属性!),然后对单个“只读”访问执行一次,然后不更改,模块级实例,这并不是太糟糕。即,在某些模块 foo.py
中:
class _Settings(object):
@property
def one(self): return self._one
@property
def two(self): return self._two
def __init__(self, one, two):
self._one, self._two = one, two
settings = _Settings(23, 45)
从其他任何地方,导入 foo
然后根据需要访问 foo.settings.one
和 foo.settings.two
。请注意,我用一个前导下划线命名该类(就像只读属性下面的两个实例属性一样)表明它不打算从模块“外部”使用——只有 settings
对象应该是(没有强制执行——但任何违反此类请求隐私的用户显然是唯一对可能发生的困惑负责的一方;-)。
关于python - 将全局变量传递给类和函数的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3640700/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!