Python:通过字符串中的名称访问结构字段

Posted

技术标签:

【中文标题】Python:通过字符串中的名称访问结构字段【英文标题】:Python: access structure field through its name in a string 【发布时间】:2013-04-10 05:59:55 【问题描述】:

在 Scapy 中,我想比较任意两个数据包 ab 之间的一些标头字段。这个字段列表是预定义的,比如:

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...

【问题讨论】:

【参考方案1】:

您可以使用getattr()。这些行是等效的:

getattr(x, 'foobar')
x.foobar

setattr() 是它的对应物。

【讨论】:

【参考方案2】:

我认为您正在寻找getattr()。试试……

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

【讨论】:

以上是关于Python:通过字符串中的名称访问结构字段的主要内容,如果未能解决你的问题,请参考以下文章

访问程序中的符号表以打印结构的字段名称

C# 怎么判断一个字符串是不是是一个类的字段属性

用python.检查“影片名称”字段为空值的+数据,给该字段填充数+据"unnamed"?

通过字符串访问/更新查询结果的字段[重复]

如何通过vba查看访问表中的记录集?

通过连接来自其他文本字段的字符串值自动填充访问表单中的字段