2016-06-11 1 views
0

Я пытаюсь наследовать от int и написать функцию increase().Наследование от int и увеличение 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 

Это не работает! Почему и как писать код?

+0

Кажется странным идеей, чтобы наследовать 'int'. Почему бы просто не использовать атрибут 'int'? – erip

+0

Также неплохо вычислить 'максимум' каждый раз. – erip

ответ

1

Невозможно сделать то, что вы пытаетесь сделать здесь, поскольку целые числа неизменны в Python. После их создания они не могут быть изменены.

От Python Documentation

Значение некоторых объектов может измениться. Объекты, значение которых может измениться, считаются изменяемыми; объекты, значение которых неизменено после их создания, называются неизменяемыми. ...Изменчивость объекта определяется его типом; например, числа, строки и кортежи неизменяемы, а словари и списки изменяемы.

В зависимости от того, что вы собираетесь использовать это для того, что вы могли бы сделать вместо этого следующее:

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 
Смежные вопросы