2016-11-21 4 views
-9
class Clock(object): 
    def __init__(self, time): 
     self.time = time 
    def print_time(self): 
     time = '6:30' 
     print(self.time) 

clock = Clock('5:30') 
clock.print_time() 

Почему он печатает 5:30 вместо '5:30'?Почему Python возвращает целое число вместо строки

+3

'5: 30' не является целым числом. – corn3lius

+2

цитаты не являются частью строки, '5: 30' не является int – depperm

ответ

3

Когда вы пишите программу python, строки должны быть помещены внутри кавычек, чтобы синтаксический анализатор знал, что они являются строками. Итак, вы печатаете

>>> time = 5:30 
    File "<stdin>", line 1 
    time = 5:30 
      ^
SyntaxError: invalid syntax 
>>> 
>>> time = '5:30' 
>>> 

Но python действительно не сохраняет сами кавычки в строке. Он создает объект типа str, значение которого равно 5:30. Когда вы печатаете строку, она печатает значение, а не цитированное представление, необходимое для работы парсера python.

Объекты Python имеют два способа отображения самих себя. __str__ возвращает ожидаемую удобочитаемую строку, а __repr__ возвращает строку, удобную для программирования, которая обычно включает информацию о типе. Для строки он включает в себя кавычки. Если вы действительно хотите, котировки по какой-то причине, вы можете использовать repr

>>> time = '5:30' 
>>> print(time) 
5:30 
>>> print(type(time)) 
<class 'str'> 
>>> print(repr(time)) 
'5:30' 
>>> 
1

"" и '' просто разграничение строки, они не являются частью этого и, следовательно, не будут напечатаны. Программа правильно печатает здесь строку. (5:30 не является целым числом в любом случае)

PS: Я не знаю, если time = '6:30' в print_time предполагается изменить атрибут времени в Clock, но если есть, то оно должно быть self.time = '6:30'. Текущая инструкция не имеет никакого эффекта.