#python #python-2.7 #properties
#python #python-2.7
Вопрос:
По какой-то причине ‘obj._max_value’ и ‘obj._current_value’ не устанавливаются. Я просмотрел много руководств, и кажется, что я делаю это правильно. Кто-нибудь знает, почему он не работает?
Смотрите Код: https://gist.github.com/matthew-campbell/5561562
(Python 2.7)
Обновить:
class Progress():
@property
def progress_bar_length(self):
return self._progess_bar_length
@progress_bar_length.setter
def progress_bar_length(self, length):
self._progress_bar_length = length
@progress_bar_length.deleter
def progress_bar_length(self):
del self.progress_bar_length
Комментарии:
1. Не используйте огромные, в основном нерелевантные примеры кода и, безусловно, не размещайте ссылки на Gist. Рекомендуется свести вашу проблему к ее основам и опубликовать образец кода (настолько простой, насколько это возможно) в вашем вопросе. Ваша проблема могла быть легко продемонстрирована с помощью <10 строк кода.
Ответ №1:
property
Декоратор не работает с классами старого стиля. Унаследуйте свой класс от object
, чтобы получить класс нового стиля:
class Progress(object):
# ...
Комментарии:
1. @MattCampbell Кроме того, Python — это не Java. Скорее всего, вам не нужны все эти свойства, они служат только для замедления работы вашей программы и усложняют ее обслуживание (из-за множества ненужных шаблонов).
2. @user4815162342 Почему ты так говоришь? Я нахожу это удобным в использовании. Откуда вы знаете, что это замедляет работу компьютера?
3. Свойства @Valentyn хороши, когда они действительно имеют смысл в вашей программе, но вам не нужно использовать их везде , например, чтобы выставить «частный» слот как «общедоступное» свойство. Это замедляет работу программы (а не компьютера!) потому что интерпретируется CPython, поэтому нет JIT-компилятора для встроенных вызовов всех этих функций доступа. Кроме того, в Python вы всегда можете начать с общедоступного атрибута и перенести его в свойство позже без потери совместимости с API. Нет причин использовать свойство, потому что вам может понадобиться добавить логику в будущем — вы добавите ее, если / когда она вам действительно понадобится.