I don't think you need a metaclass here. In fact, since the metaclass is fixed at the point where the class is defined, I don't think it provides you an opportunity to parametrize the shape.
You could use a class factory instead:
def packetdata(n):
class PacketData(pt.IsDescription):
data = pt.UInt8Col(shape=(n,))
return PacketData
self.tdata = self.hfile.createTable(self.g, 'packetdata', packetdata(128),
filters=filters)