creer une classe pourcentage

creer une classe pourcentage - Python - Programmation

Marsh Posté le 22-07-2004 à 15:52:18    

bonjour,
j'ai besoin d'une classe pourcentage permettant de créer des instances (comme avec float, int...), d'additionner ou soustraire deux pourcentage, de multiplier ou diviser un pourcentage par un naturel.
 
ces pourcentages héritent de float et j'aimerais les limiter à deux digits. seulement, pas moyen de tronquer la valeur...
 


def __isPercent__(obj):
    """Check if object is an percent instance."""
    if not isinstance(obj, Percent):
        raise AttributeError, 'percent expected, %s found' % type(obj)        
# END __isPercent__
     
def __isNatural__(obj):
    """Check if object is an positive integer instance."""
    if not isinstance(obj, int):
        raise AttributeError, 'integer expected, %s found' % type(obj)  
    elif isinstance(obj, int) and obj < 0:
        raise AttributeError, 'natural expected'
# END __isInteger__
 
##################################################
 
class Percent(float):
     
    def __init__(self, value=-1):
        """Create a percentage.
        @param value: value of the percentage
        @type value: integer or float between 0 and 100"""
        if value < 0 or value > 100:
            raise ValueError, 'incorrect value %s' % str(value)
        float.__init__(self, round(value, 2))
    # END __init__
 
    def __add__(self, other=None):
        """Add a percentage to another.
        @param other: percentage to add
        @type other: instance of the Percent class"""
        __isPercent__(other)
        return Percent(float.__add__(self, other))  
    # END __add__
     
    def __sub__(self, other=None):
        """Substract a percentage from another.
        @param other: percentage to substract
        @type other: instance of the Percent class"""
        __isPercent__(other)
        return Percent(float.__sub__(self, other))  
    # END __sub__
     
    def __mul__(self, other=None):
        """Multiply a percentage by an int.
        @param other: factor
        @type other: integer"""
        __isNatural__(other)
        return Percent(float.__mul__(self, other))  
    # END __mul__
     
    def __floordiv__(self, other=None):
        """Divide a percentage by an int.
        @param other: denominator
        @type other: integer"""
        __isNatural__(other)
        return Percent(float.__floordiv__(self, other))  
    # END __floordiv__
     
    def __coerce__(self, other=None):
        """Handling different operand types is left to the operation."""
        return (self, other)
    # END __coerce__
     
    def getUnitar(self):
        """Return the fractional value of the percentage."""
        return round(self / 100, 2)
    # END getUnitar
 
# END Percent


 
ce que je ne comprends pas non plus, c'est qu'en commentant le contenu de ma fonction __init__, Percent(10) renvoie quand meme 10.0
je suis complètement dans le flou...

Reply

Marsh Posté le 22-07-2004 à 15:52:18   

Reply

Marsh Posté le 22-07-2004 à 16:17:32    

ben 10.0 c'est l'affichage d'un float
 
et pourquoi tu veux modifier la précision de ton pourcentage dans les calculs? il suffit de limiter à la représentation et à l'impression -_-


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-07-2004 à 16:23:52    

 # END __init__  
 
minable ...
 
 
tu vas ou avec tes __monTrucPersoMerdique__ ? les __xxx__ sont réservé. ne les utilise pas. fait des membres statiques.
 
et vérifie tes tests, ils sont redondants
 
 
les %s' % str(value) aussi c'est redondants
 
 
float.__add__(self, other)
 
t'as vraiment le chic pour rendre le python si élégant, tout pourri et complètement obfusqué

Reply

Marsh Posté le 22-07-2004 à 16:28:41    

l'accueil est toujours aussi charmant à ce que je vois...

Reply

Marsh Posté le 22-07-2004 à 16:31:15    

tu l'as bien cherché

Reply

Marsh Posté le 22-07-2004 à 16:43:18    

je dois quand même dire que j'adore le construteur par défaut (val = Percent()) qui balance direct une exception, je trouve ca ultimement classe :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-07-2004 à 16:56:38    

je balance quoi pour faire propre?

Reply

Marsh Posté le 22-07-2004 à 17:00:34    

accessoirement si tu essaie de faire un int d'une string... ça renvoie une exception aussi...
 
faudrait arrêter de prendre les autres de haut... et de croire que vous êtes le bon dieu...

Reply

Marsh Posté le 22-07-2004 à 17:14:01    

int() == 0
float() == 0.0
str() == ''
list() == []
tuple() == ()
dict() == {}
 
y'aurait pas comme une constante la?
 

Citation :

accessoirement si tu essaie de faire un int d'une string... ça renvoie une exception aussi...


http://www.mangaclub.ch/urd/ebichuley/avatars/ebichu007.jpg
"%f" % value / "%d" % value > you
 
fyi c'est pas spécialement prendre les gens de haut (enfin taz si mais il peut se le permettre), c'est soit la base du langage soit de la logique de base


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed