В настоящее время я пишу подкласс для класса 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)
, верно?
Большое спасибо за помощь!