Fala ai mano, blz?
Cara, estou lendo o livro black hat python e me deparei com a seguinte situação:
No capitulo 2 o autro ensina criar um sniffer de rede. Para isso ele cria uma estrutura do cabeçalho do IP.
O autor usa o módulo ctypes, e um pedaço do código segue abaixo:
from ctypes import *

class IP(Structure):

_fields_ = [
("src", c_ulong),
("dst", c_ulong)
]
def __init__(self, socket_buffer=None):
# human readable IP addresses
self.src_address = socket.inet_ntoa(struct.pack("<L",self.src))
self.dst_address = socket.inet_ntoa(struct.pack("<L",self.dst))

Minha dúvida é ma seguinte, como funciona o _fields_ ?
Pois pois na função __init__ ele chama slf.src e self.dst que estão definidas em duas tuplas dentro da lista que está armazenada em _fields_.
Grato desde já.