如果变量不存在,如何检查实例是否存在?
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
真值测试为假。但它只会在您强制执行时执行此操作。
您可以使用目录功能
a=5
'a' in dir()
'b' in dir()
这将打印
True
False
所以在你的情况下
if 'var' in dir():
var.toggleUI()
else :
var = varClass()
我有一个按钮,可以导入带有 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
真值测试为假。但它只会在您强制执行时执行此操作。
您可以使用目录功能
a=5
'a' in dir()
'b' in dir()
这将打印
True
False
所以在你的情况下
if 'var' in dir():
var.toggleUI()
else :
var = varClass()