如果变量不存在,如何检查实例是否存在?

How to check if instance exists if variable not existing?

我有一个按钮,可以导入带有 class 的模块。 class (varClass) 创建一个 window.

如果我再次点击按钮,我会尝试这个:

if var:
    var.toggleUI()
else :
    var = varClass()

但是在您打开 Maya 后第一次创建 window 时,var 并不存在。我怎样才能让这个工作?

您可以捕获 NameError 异常:

try:
    var.toggleUI()
except NameError:
    var = varClass()

如果您也需要第一次调用 toggleUI,只需尝试名称本身:

try:
    var
except NameError:
    var = varClass()

var.toggleUI()

我不熟悉 Maja,但如果您可以先在别处定义名称,然后简单地将其设置为 None,那么您的代码即使不是更好也能正常工作。

使用例外:

try:
    var.toggleUI()
except NameError:
    var = varClass()
    var.toggleUI()

默认您的 var,并将其用作测试:

var = None
if var is None:
  var = varClass()
var.toggleUI()

如果您在按钮内执行此操作,则应将 var 的管理卸载到您正在导入的模块。让模块处理实例化,按钮让模块完成繁重的工作。只要导入没有副作用(如果操作正确,它就不应该有),冗余导入就不会造成伤害。

该模块执行如下操作:

class SampleGui(object):
     # all sorts of good stuff here

_sample_gui_instance = None
def get_instance():
    _sample_gui_instance = sample_gui_instance or SampleGui()
    return _sample_gui_instance 

按钮就可以了

import SampleGuiModule
SampleGuiModule.get_instance().toggleUI()

这与其他人的答案中的检查相同,但我认为通过将实例管理委托给模块而不是按钮,您可以进行任何级别的复杂性或初始化并在按钮之间共享、热键或其他透明脚本。

我使用 or 而不是 if... is None 保存了几个字符;由于某种原因,这将是棘手的 SampleGui 真值测试为假。但它只会在您强制执行时执行此操作。

可能有用:maya callbacks cheat sheet

您可以使用目录功能

a=5
'a' in dir()
'b' in dir()

这将打印

True
False

所以在你的情况下

if 'var' in dir():
    var.toggleUI()
else :
    var = varClass()