2016-06-11 11 views
0

Ich versuche, von int erben und schreiben Sie die increase() Funktion dafür.Vererbung von int und Erhöhung in Python

import math 


class Counter(int): 

    def increase(self): 
     self += 1 
     # it should be less then 2**32 
     maximum = math.pow(2, 32) 
     if self > maximum: 
      self -= maximum 



counter = Counter(10) 
print counter 
counter.increase() 
print counter 
counter.increase() 
print counter 

ouput:

10 
10 
10 

Es funktioniert nicht! Warum und wie schreibe ich den Code?

+0

scheint wie eine seltsame Idee 'int' zu erben. Warum haben Sie nicht einfach ein 'int' Attribut? – erip

+0

Es ist auch keine gute Idee, jedes Mal 'maximum' zu berechnen. – erip

Antwort

1

Es ist nicht möglich, das zu tun, was Sie hier versuchen, da ganze Zahlen in Python unveränderlich sind. Sobald sie erstellt wurden, können sie nicht mehr geändert werden.

Von Python Documentation

Der Wert einiger Objekte ändern können. Objekte, deren Wert sich ändern kann, werden als veränderbar bezeichnet; Objekte, deren Wert unveränderbar ist, sobald sie erstellt wurden, werden unveränderlich genannt. ...Die Veränderlichkeit eines Objekts wird durch seinen Typ bestimmt; zum Beispiel sind Zahlen, Strings und Tupel unveränderlich, während Wörterbücher und Listen änderbar sind.

Je nachdem, was Sie vorhaben, diese zu verwenden, für das, was Sie stattdessen tun könnte, ist die folgende:

class Counter(object): # new style object definition. 

    def __init__(self, num): 
     self.value = num 
     # this is 32bit int max as well, same as pow(2,32) function. 
     self.maximum = 0xFFFFFFFF 
    def increase(self): 
     self.value += 1 

     if self.value > self.maximum: 
      self.value -= self.maximum 

    def __repr__(self): # representation function. 
     return str(self.value) 

    def __str__(self): # string function 
     return str(self.value) 

counter = Counter(10) 
print counter 
counter.increase() 
print counter 
counter.increase() 
print counter