#!/usr/bin/env python import struct class Formatters(object): @staticmethod def string(val): return '{}s'.format(len(val)), bytes(val, 'utf-8') @staticmethod def uint64(val): return 'Q', val class Person(object): __slots__ = ['vorname', 'nachname'] _wandler = { 'vorname': Formatters.string, 'nachname': Formatters.string } def __init__(self, vorname, nachname): self.vorname = vorname self.nachname = nachname def __repr__(self): return '{} {}'.format(self.vorname, self.nachname) def serialize(self): formatstr = list() arguments = list() for i in self.__slots__: w = self._wandler[i](getattr(self, i, None)) formatstr.append(w[0]) arguments.append(w[1]) return struct.pack(''.join(formatstr), *arguments) class Student(Person): # __slots__ wird NICHT vererbt! __slots__ = Person.__slots__ + ['graduation'] def __init__(self, vorname, nachname, graduation): super().__init__(vorname, nachname) self._wandler.update({'graduation': Formatters.uint64}) self.graduation = int(graduation) def __repr__(self): return '{} {}'.format(self.vorname, self.nachname) if __name__ == '__main__': p = Person('Sheeva', 'Plug') print(p) print(p.serialize()) p = Student('Sheeva', 'Plug', 1991) print(p) print(p.serialize())