Anonymní profil FoxVK – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil FoxVK – Programujte.comAnonymní profil FoxVK – Programujte.com

 

Příspěvky odeslané z IP adresy 178.72.244.–

FoxVK
Python › Třída reprezentující strukturu
27. 10. 2012   #165388

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. 

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý