是否可以直接在代码内部将字符串值用作类等?我不知道确切地描述我想用单词做什么,因此伪代码版本可能是理解问题所在的最佳方法。这是示例:
for node in itemdict.iterkeys():
nodeinfo = itemdict.get(node)
if nodeinfo[4] == "node": #create new Links based on original nodeclass
#Example if nodeinfo[1] == "Dot"
#link = nuke.nodes.Dot(hide_input=nodeinfo[3], label='to: ' + nodeinfo[2])
link = nuke.nodes.XXX_value of nodeinfo[1] here_XX(hide_input=nodeinfo[3], label='to: ' + nodeinfo[2])
答案 0 :(得分:1)
如果要按名称获取类,则可以使用内置函数globals
来获取它。
例如:
class A(object):
def __init__(self):
self.number = 1
class B(object):
def __init__(self):
self.number = 2
for name in 'A', 'B':
print(globals()[name]().number)
这将输出:
1
2
答案 1 :(得分:1)
您要使用getattr
内置函数按名称从对象获取属性:
for node in itemdict.iterkeys():
nodeinfo = itemdict.get(node)
if nodeinfo[4] == "node": #create new Links based on original nodeclass
# Get the attribute named <the value of nodeinfo[1]> from nuke.nodes
cls = getattr(nuke.nodes, nodeinfo[1])
link = cls(hide_input=nodeinfo[3], label='to: ' + nodeinfo[2])
如果对象不具有您传递给getattr
的名称的属性,则会引发AttributeError
。您可以在代码中处理此错误,也可以将第三个参数传递给getattr
,getattr
将返回该参数,而不是引发AttributeError
。