设置类属性问题

2024-09-28 21:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在和scapy合作,有一个与scapy有关的问题,还有python。我尝试使用变量作为scapy字段名。下面是一段代码的摘录,它应该说明我尝试做什么(它不起作用):

class Test(Packet):
    name = "Test23"
    def __init__(self,foo=None):
        self.foo=foo

    fields_desc = [
                BitField(self.foo, 0x0, 4),
                BitField("bar", 0x3, 4)
                ]

现在我想问题是由于fields_desc是一个类属性而不是一个类变量。现在,我怎样才能达到我想要的?(设置的名称self.foo公司在运行时/类初始化时?)在

我很感激你的帮助。 谨致问候

编辑:附加一个计数器就足够了。我试过了:

^{pr2}$

但似乎不起作用。如果你能给我指个正确的方向就好了,不知怎么的我迷路了。在


Tags: 代码nametestselffieldsfoopacketinit
2条回答

我猜你想做的是根据你用'getfield'解析的原始数据输入更改第一个位字段的名称?有点难说。。。在

无论如何,从函数pre_dissect可以查看原始数据并将字段附加到self.fields_desc如你所愿。使用pre_dissect时,请确保在未修改的函数末尾返回原始数据包数据。在

在我的经验中,这样做很少是正确的,从长远来看,条件域和类重载通常会更好地工作。在

祝你好运

我认为类属性是在类构造函数运行之前初始化的,所以self.foo公司在创建字段“描述”时尚未分配。尝试将fields_desc声明为空数组,并在__init__函数中向其追加BitField对象。在

我不知道您从中继承的Packet类是如何工作的,但是您可能还想看看super() function。在

编辑:也许你在找这样的东西?在

class Counter:
    i = 0
    foo = []
    def count(self):
        self.__class__.i += 1
        self.__class__.foo.append(['lala' + str(self.__class__.i)])

a = Counter()
a.count()
print Counter().foo
b = Counter()
b.count()
print Counter().foo

输出

^{pr2}$

有关类变量here的详细信息

相关问题 更多 >