Python使用字符串值作为类/代码的一部分

时间:2018-06-30 23:38:17

标签: python python-2.7

是否可以直接在代码内部将字符串值用作类等?我不知道确切地描述我想用单词做什么,因此伪代码版本可能是理解问题所在的最佳方法。这是示例:

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])

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。您可以在代码中处理此错误,也可以将第三个参数传递给getattrgetattr将返回该参数,而不是引发AttributeError