9
votes

Est-ce que Python a des opérateurs de conversion?

Je ne pense pas, mais je pensais demander au cas où. Par exemple, pour une utilisation dans une classe qui encapsule un int: xxx

et je ne suis pas simplement intéressé par cet exemple, je cherchais quelque chose de propre et général, ne remplace pas tous les intors et Méthode de chaîne.

Merci, Sunqiang. C'est juste ce que je voulais. Je n'ai pas réalisé que vous pouvez sous-classer ces types immuables (provenant de C ++). xxx


0 commentaires

5 Réponses :


3
votes

Ce dont vous avez besoin? XXX


3 commentaires

Pas vraiment. Je cherchais quelque chose comme l'opérateur de conversion C ++, qui remplace intelligemment l'objet du conteneur avec tout ce qu'il contient dans les expressions.


Cela échouera pour "5 + i", je crois.


Ars, vous avez raison, j'ai vu votre réponse et il me manque radd ... Je suppose que ça va bien après avoir changé ma réponse ...



12
votes

Cela devrait faire ce dont vous avez besoin: xxx

sortie: xxx

Pour plus d'informations Recherchez "Radd" dans les documents suivants :


0 commentaires

5
votes

Vous n'obtiendrez pas les opérateurs de conversion comme en C ++ car Python n'a pas ce genre de système de type statique fort. Les seuls opérateurs de conversion automatique sont ceux qui gérent les valeurs numériques par défaut (int / float); Ils sont prédéfinis dans la langue et ne peuvent pas être changés.

type "conversion" est généralement effectué par des constructeurs / usines. Vous pouvez ensuite surcharger des méthodes standard telles que __ ajouter __ pour le faire fonctionner plus comme d'autres classes.


0 commentaires

3
votes

Parfois peut-être que la sous-classe d'int directement est suffisante. Ensuite, __ ajouter __ code> et __ radd __ code> ne doit pas ne pas se recourir.

class IntContainer(int):
    pass
i = IntContainer(3)
print i + 5 # 8 
print 4 + i # 7

class StrContainer(str):
    pass
s = StrContainer(3)
print s + '5' # 35
print '4' + s # 43


0 commentaires

2
votes

Désolé d'être venu à la fête de 8,5 ans de retard. Vous pouvez dériver d'une immuable (c.-à-d. Int). Vous ne pouvez pas définir __ init __ car l'immuable est déjà créée et ne peut pas être modifiée (par définition). C'est là que __ nouveau __ est utile. XXX

MAINTENANT, pour répondre à votre question sur les opérateurs de conversion. Vous pouvez également définir __ int __ , __ long __ , __ float __ , et évidemment, __ str __ . Pour convertir ou lancer en un objet arbitraire, vous devrez probablement modifier l'autre objet pour obtenir ce que vous voulez. Vous pouvez utiliser la méthode __ nouvelle __ de cet autre objet. Ou si l'autre objet est déjà créé, essayez d'utiliser __ appel __ .


0 commentaires