Форум сайта python.su
0
Есть класс-анкета.
Возникла проблема, когда вводится партнёр, то статус с “True” не меняется на “Not free”, как планировалось. Что упустил?
class Anketa: def __init__(self, name, age, partner): self.name = name self.age = age self.partner = partner #Партнёр или есть, или нет. (True/False) def __get__(partner): #Если партнёра нет, то выводится if partner == (True): #в статусе "Free", и если партнёр есть, partner = 'Not Free' #то статус меняется на "Not Free" if self.partner == False: partner = 'Free' def __str__(self): return '[Mister %s, age: %s, status: %s]' %(self.name, self.age, self.partner) ivan = Anketa('Ivan Erochin', age = 23, partner = True) sveta = Anketa('Svetka Ivanova', age = 27, partner = False) print (ivan) print (sveta)

Офлайн
221
Я думам вам надо делать подобное на уровне преобразования в строку, иначе я как то не представляю задуманное
# -*- coding: utf-8 -*- class Anketa: def __init__(self, name, age, partner): self.name = name self.age = age self.partner = partner def __str__(self): return '[Mister %s, age: %s, status: %s]' %(self.name, self.age, 'Not Free' if self.partner else 'Free') ivan = Anketa('Ivan Erochin', age = 23, partner = True) sveta = Anketa('Svetka Ivanova', age = 27, partner = False) print (ivan) print (sveta)
[Mister Ivan Erochin, age: 23, status: Not Free] [Mister Svetka Ivanova, age: 27, status: Free]
Отредактировано JOHN_16 (Ноя. 7, 2013 06:49:58)
Офлайн
0
Спасибо большое. Однако, не понял сам процесс, механику изменения.
'Not Free' if self.partner else ‘Free’ можно понять как: ‘Not Free’ если self.partner “True”, то есть указан. Иначе - идет обозначение ‘Free’.
Всё верно я понял?
Офлайн
221
Pytophone
не совсем, применение шире. if object возвращает True если объект не пустой, это может быть не пустая строка, список, лист, другой объект у которого определено это. Если надо непосредственно сравнение с True, то запись будет выглядеть так:
'Not free' if self.partner==True else 'Free'
Офлайн
33
('Free', 'Not Free')[self.partner]
Офлайн