J'écris une fonction de codage personnalisée à utiliser avec msgpack-python. Je souhaite convertir n'importe quel objet numpy.float en flottant avant de laisser msgpack-python le sérialiser. Ma fonction de codage ressemble à ceci:Duck en tapant des types float numpy
def encode_custom(obj):
if issubclass(obj.__class__,np.float):
obj = float(obj)
return obj
qui fonctionne très bien. Cependant, la réponse la mieux votée au How do I check (at runtime) if one class is a subclass of another? suggère que c'est une mauvaise idée. Je suppose que c'est parce que cette méthode n'utilise pas de dactylographie.
Existe-t-il un moyen de dactylographier la fonction de codage?
EDIT: Notez que je veux seulement que les objets de type float soient convertis en float. Les objets qui sont mieux représentés comme un autre type (par exemple ints) devraient utiliser cet autre type, même s'ils peuvent être float()
'd dans un objet flottant.
'essayer: flotteur de retour (obj) sauf ValueError : return obj' – SethMMorton
@SethMMorton Cela convertit aussi les entiers en float. –
C'est une mauvaise idée dans certains cas. Vous avez spécifiquement dit que vous voulez convertir des flotteurs numpy, donc cela semble bien. Cependant, je suggère simplement d'utiliser 'isinstance (obj, np.float)'. –