Zdravíčko,
našel by se někdo zkušenější a poradil by mi jak co nejčistěji udělat třídu která reprezentuje strukturu ?
struktura by se měla uměl složit jednak ze samostatných polí předaných jak paramtery konstruktoru a taky z binárních dat. A musí z ní být nějakým způsbem možné zjistit její délku v bytech.
Zatím jsem to zprasil nějak takto
class Message (object):
__format=""
def length(self):
return struct.calcsize(self.__format)
class Nlmsghdr (Message):
'''header mesage'''
__format="IHHII"
def __init__(self,nlmsg_len,nlmsg_type,nlmsg_seq,nlmsg_pid,nlmsg_flags=0):
'''len should not include length of this structure'''
self.len=nlmsg_len+16 #Length of message including header.
self.type=nlmsg_type #Message type (content type).
self.flags=nlmsg_flags #Message flags.
self.seq=nlmsg_seq #Sequence number.
self.pid=nlmsg_pid #PID of the proccess sending the message.
print self.length()
@classmethod
def from_bytes(cls, databytes):
length=struct.calcsize(Nlmsghdr.__format)
(len, type, flags, seq, pid)=struct.unpack(Nlmsghdr.__format, databytes[:length])
len-=length
return cls(len, type, seq, pid, flags)
def pack(self):
return struct.pack(self.__format, self.len, self.type, self.flags, self.seq, self.pid)
def __str__(self):
return ("Length=%d, Type=%d, Seq no.=%d, PID=%d, Flags=%s"%(self.len, self.type, self.seq, self.pid, bin(self.flags)))
co mě docela nemile překvapilo je že když dědím z té třídy Message tak při volání length() z té druhé třídy se pořád bere proměnná __fromat z té rodičovské třídy.
provizorně jsem to vyřešil takto.
self.len=nlmsg_len+16 #Length of message including header.