Вы использовали заявление return
доprint()
звонок. Выполнение функции заканчивается в тот момент, print()
никогда не достигается:
def get_speed(self):
# return ends a function
return self._speed
# anything beyond this point is ignored
print("the speed is {}".format(self.speed))
Поместите print()
вызов перед тем возвратную заявление:
def get_speed(self):
print("the speed is {}".format(self._speed))
return self._speed
Я исправленную функцию print()
, чтобы показать self._speed
(с символ подчеркивания в названии атрибута), в противном случае вы попали бы в бесконечную рекурсию (поскольку self.speed
запускает свойство снова получает). Вы, вероятно, хотите сделать то же самое в функции set_speed()
, так как это будет инициировать get_speed()
добытчика и вы тоже увидите the speed is <newspeed>
печатается перед set speed to <newspeed>
печатается каждый раз, когда вы меняете скорость:
class Car(object):
def set_speed(self, speed):
self._speed = speed
print("set speed to {}".format(speed))
def get_speed(self):
print("the speed is {}".format(self._speed))
return self._speed
speed = property(fget = get_speed, fset=set_speed)
Далее, вы можете используйте объект property
как декоратор ; полученный property
экземпляр имеет setter()
метод, который может быть повторно использован для украшения сеттера тоже:
class Car(object):
@property
def speed(self):
print("the speed is {}".format(self._speed))
return self._speed
@speed.setter
def speed(self, speed):
self._speed = speed
print("set speed to {}".format(speed))
См How does the @property decorator work? о том, как это работает.
Вау, какая ошибка. Спасибо. – p3ob2lem