J'ai une classe Thing avec un attribut float x. Et je veux comparer approximativement deux instances de Thing avec une tolérance relative de 1e-5.

import attr

@attr.s
class Thing(object):
    x: float = attr.ib()


>>> assert Thing(3.141592) == Thing(3.1415926535)  # I want this to be true with a relelative tolerance of 1e-5
False

Dois-je remplacer la méthode __eq__ ou existe-t-il un moyen propre de dire à attr d'utiliser math.isclose() ou une fonction de comparaison personnalisée ?

1
Pablo 22 janv. 2020 à 19:46

1 réponse

Meilleure réponse

Oui, définir eq=True et mettre en œuvre votre propre __eq__/__ne__ est votre chemin à parcourir. Dans ce cas, votre besoin est si spécifique que je ne saurais même pas comment l'abstraire sans le rendre confus.

1
hynek 28 janv. 2020 à 15:04