Почему мой установщик свойств Python не вызывается при создании подклассов из пакета Scapy - PullRequest
0 голосов
/ 17 февраля 2019

В настоящее время я пишу подкласс для класса Packet Scapy, который обеспечивает странное поведение при использовании свойств с установщиками.Более того, проблема возникает только в Python 3, а не в Python 2. Более конкретно, мой установщик свойств никогда не вызывается (в Python 3), и я не понимаю, почему это так.

Пожалуйста, возьмитепосмотрите на следующий фрагмент кода:

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import Packet


class IH(Packet):
    pass


def getter(self):
    print("GETTER")


def setter(self, value):
    print("SETTER")


prop = property(fget=getter, fset=setter)
setattr(IH, "x", prop)


def main():
    p = IH()
    p.x
    p.x = 1


if __name__ == "__main__":
    main()

С Python 2 вывод выглядит следующим образом:

$ python test.py
GETTER
SETTER

, что я и ожидал.

ВОднако в Python 3 выходные данные выглядят так:

$ python3 test.py
GETTER

=> метод setter никогда не вызывается.

Полагаю, это как-то связано с классом Packet из Scapy IЯ делаю подклассы от, так как все работает нормально, когда я делаю подкласс от объекта.

В моем понимании, если я напишу

p.x = 1

, то это должно перевести на

setter(p, 1)

, верно?

Большое спасибо за помощь!

...