Я портирую скрипт python на .NET, чтобы упростить работу, и это первый раз, когда я на самом деле что-то делаю на python, поэтому я сильно проверяю stackoverflow для каждой строки, которую я не понимаю, и я могу " Кажется, это вообще не видно.python getattr возвращается к обработчику, когда именно обработчик установлен в None?
У меня есть объект-обработчик, который устанавливается getattr()
, когда имя None?
Насколько я могу судить по чтению кода, имя никогда не будет ничем, поскольку оно установлено правильно, так что же делает здесь getattr()
?
Если объект инструкции был None? (Я думаю, это похоже на null/Nothing?), Если бы он не вызвал исключение, прежде чем попасть в строку getattr()
, а затем снова я не верю, что инструкция никогда не может быть None, если мнемоника равна None, строка все равно будет выглядеть как on_
, поэтому name
будет до сих пор технически никогда не будет None
. Так что обработчик никогда не будет None
, то почему это возможно?
name = 'on_%s' % instruction.mnemonic
handler = getattr(self, name, None)
if handler is None:
self.on_fail('Not implemented', instruction)
return False
около 30 строк вниз в python обработчик используется в последний раз здесь.
if handler(instruction) is False:
self.on_fail('Handler skipped', instruction)
Кажется теперь обработчик может принять класс команд я не могу найти любой класс обработчика, который имеет __init__
с инструкцией в нем либо.
Разобрался немного, кажется, он используется с некоторыми глобальными функциями картографами
on_cmovae = on_cmovcc
on_cmova = on_cmovcc
on_cmovbe = on_cmovcc
on_cmovb = on_cmovcc
on_cmovg = on_cmovcc
on_cmovge = on_cmovcc
on_cmovl = on_cmovcc
on_cmovle = on_cmovcc
on_cmove = on_cmovcc
on_cmovne = on_cmovcc
on_cmovs = on_cmovcc
который карта обратно к функции
def on_cmovcc(self, i):
self.writer.putlnc('if (%s)', i.get_condition_value())
self.writer.indent()
self.set_op(i.op1, i.op2.get())
self.writer.dedent()
Хорошо, кажется GetAttr() используются для сопоставления функции вызовы по имени строки
Вы прочитали документацию? ['getattr'] (https://docs.python.org/2/library/functions.html#getattr) получает атрибут от объекта, а третий аргумент' None' - значение по умолчанию в случае отсутствия запрашиваемого атрибута , 'getattr' не является сеттер. –
Эти документы мне очень трудно понять, я не могу свести связь с английского на реальное понимание, поэтому я основываю все свои знания на тропе и ошибках, и обычно я это выясняю – SSpoke