Python: доступ к полю структуры через его имя в строке

В Scapy я хочу сравнить количество полей заголовка между любыми двумя пакетами a и b. Этот список полей предопределен, скажем:

fieldsToCompare = ['tos', 'id', 'len', 'proto'] #IP header

Обычно я бы сделал это индивидуально:

if a[IP].tos == b[IP].tos:
   ... do stuff...

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

for field in fieldsToCompare:
    if a[IP].field == b[IP].field:
         ... do stuff...

person Ricky Robinson    schedule 17.04.2013    source источник


Ответы (2)


Вы можете использовать getattr(). Эти строки эквивалентны:

getattr(x, 'foobar')
x.foobar

setattr() является его аналогом.

person Gareth Webber    schedule 17.04.2013

Я думаю, вы ищете getattr(). Пытаться...

for field in fieldsToCompare:
    if getattr(a[IP], field) == getattr(b[IP], field):
         ... do stuff...
person Aya    schedule 17.04.2013