小编Ste*_*eve的帖子

为什么`type(myField)`返回`<type'instal'>`而不是`<type'Field'>`?

我遇到了一个python问题.我想用来type()找出我正在使用的变量类型.代码看起来与此类似:

class Foo():
       array=[ myField(23),myField(42),myField("foo"), myField("bar")]
       def returnArr(self):
          for i in self.array:
               print type(i)

if __name__ == "__main__":
    a=Foo()
    a.returnArr()
Run Code Online (Sandbox Code Playgroud)

编辑:myField()是我定义的类.

当我要求type()时,我得到: <type 'instance'>现在根据1,这是因为我使用了一个类元素并要求type()它.现在,我需要的是:<type 'int'>对于例如:myField(42)<type 'str'>myField(foo).我怎么能实现这一点?

编辑:

def __init__(self, name, default, fmt="H"):
    self.name = name
    if fmt[0] in "@=<>!":
        self.fmt = fmt
    else:
        self.fmt = "!"+fmt
    self.default = self.any2i(None,default)
    self.sz = struct.calcsize(self.fmt)
    self.owners = []
Run Code Online (Sandbox Code Playgroud)

代码取自scapy,我尝试调整它.

python

44
推荐指数
2
解决办法
4万
查看次数

scapy如何检查是否设置了字段

我正在用scapy建造一层.该图层具有ConditionalFields:

class Foo(Packet):
    name = "Foo"
    fields_desc = [
             ConditionalField(BitField("bar1", None, 4),
                             lambda pkt: pkt.bar1 is not None),
             ConditionalField(BitField("bar2", None, 4),
                              lambda pkt: pkt.bar2 is not None),

             ByteField("bar3", 0x0), 
             ByteField("bar4", 0x0)
             ]
Run Code Online (Sandbox Code Playgroud)

现在我如何检查bar1是否已设置?RESP.BAR2?我写的lambda函数对我来说似乎是正确的,并且根据文档它以这种方式使用,但它不起作用.你知道我怎么解决这个问题吗?我们的想法是,如果bar1bar2我实例化类Foo设置,它应该出现在包,否则不行.我不想只针对那种情况做2包.

python scapy

5
推荐指数
1
解决办法
1367
查看次数

标签 统计

python ×2

scapy ×1