Python использует строковое значение как класс / часть кода - PullRequest
0 голосов
/ 01 июля 2018

возможно ли использовать значение строки непосредственно внутри кода в качестве класса и т. Д.? Я не знаю, чтобы точно описать, что я хочу сделать со словами, поэтому версия с псевдокодом, вероятно, является лучшим способом понять, в чем проблема. Вот пример:

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 голосов
/ 01 июля 2018

Вы хотите использовать встроенную функцию 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.

0 голосов
/ 01 июля 2018

Если вы хотите получить класс по имени, вы можете использовать встроенную функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...