Třída reprezentující strukturu – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Třída reprezentující strukturu – Python – Fórum – Programujte.comTřída reprezentující strukturu – Python – Fórum – Programujte.com

 

FoxVK
~ Anonymní uživatel
2 příspěvky
27. 10. 2012   #1
-
0
-

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. 
Nahlásit jako SPAM
IP: 178.72.244.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Strukturu new — založil pep

Ako na strukturu — založil Vestax

Pointer na strukturu — založil Romča

Pointer na strukturu — založil Fugii

Pointer na strukturu — založil Pavelv

 

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