2017-10-08 6 views
0

J'ai une tâche où je suis censé créer une classe Fractions et toutes les fonctions sont des "méthodes magiques". Le problème est que mon professeur ne nous a jamais enseigné de méthodes magiques. J'ai utiliséFractions class python

__init__ 

mais jamais utilisé d'autres méthodes magiques. J'ai deux jours pour programmer cela et j'ai besoin de conseils sur la construction de ce code. Le plus proche de ce que je dois programme que je trouve ici: https://gist.github.com/mustaa/2350807 Mais je ne peux pas comprendre ce qui se passe dans ce code

Les méthodes magiques sont:

class Fraction: #I need it in a form like the one on github, but easier to understand 
    __init__ #construct a rational number with a given numerator and denominator 
    __add__ #add two fractions 
    __sub__ #subtract to fractions 
    __eq__ #check if 2 fractions are equal 
    __ne__ #check if 2 are not equal 
    __lt__ #check if one fraction is less than the other 
    __le__ #check if <= 
    __gt__ #check if one fraction is greater than the other 
    __ge__ #check if >= 
    __float__ #gets float representation of fraction called by float() 
    __repr__ #gets a string representation of the Fraction instance, called by str() 

Une fois que je reçois le code squelette pour :

class Fraction, __add__, __eq__ 

Je serai en mesure de terminer moi-même le reste du travail.

+3

Je n'ai aucune idée de ce que vous êtes censé fournir pour votre devoir à partir de votre question. – roganjosh

+1

Ils sont tous expliqués dans la [documentation officielle] (https://docs.python.org/3/reference/datamodel.html#special-method-names) – UnholySheep

+0

Le code pour la fonction officielle de l'usine 'Fraction' de Python est ouvert source et est raisonnablement bien documenté, y compris les cas de test ... Si vous utilisez IPython/Jupyter, 'à partir de fractions, importez Fraction', puis exécutez' Fraction ?? '(avec deux points d'interrogation montrera le code source). –

Répondre

1

Voici comment implémenter les méthodes magiques __add__ et __eq__ pour la classe Integer inutile. Je vous laisse le soin de l'adapter à votre classe Fraction.

class Integer: 

    def __init__(self, value): 
     self._value = value 

    def __add__(self, other): 
     return Integer(self._value + other._value) 

    def __eq__(self, other): 
     return self._value == other._value 
+0

L'ajout de 'isinstance (other, Integer)' est probablement une bonne idée pour '__eq__' mais +1 pour l'exemple simple. – Shadow

+0

@Shadow Oui, l'exemple est censé être aussi dépourvu de distractions que possible: le signal est sur la façon d'écrire des méthodes magiques en général, donc tout autre chose (comme la vérification de type) serait du bruit. – jacg