
On Thu, Jun 6, 2013 at 9:18 PM, Maccarthy, Jonathan K <jkmacc@lanl.gov> wrote:
Ah, so np.int64 and np.str inherit the native Python __format__(), but np.float32/64 doesn't get __builtin__.float.__format__(). That's not intuitive, but I see now why this works:
In [8]: '{:6.6s} {:8d} {:11.6f}'.format(tmp.sta, tmp.ondate, float(tmp.lat)) Out[8]: 'XYZZ 2001123 -23.820000'
np.float64 works because it inherits from the Python float type (Python floats are 64-bit floats). np.float32 doesn't inherit from the Python float type because it can't; they don't represent the same kind of data, so their memory layouts at the C level cannot coincide. Since you are on a 64-bit platform, np.int64 represents the same kind of integer as the Python int type, so it can subclass, but an np.int32 couldn't. It's not necessarily intuitive, but it's the best we can do under the constraints. The only thing more intuitive would be to disallow subclassing from the Python builtin types entirely, but that's *really* annoying. -- Robert Kern