|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||||||||||||
Объект не имеет атрибута, хотя он его имеет. Почему так?16.12.2018, 23:33. Показов 12988. Ответов 17
Метки нет (Все метки)
Друзья! Ковыряюсь в классах. Пытаюсь понять логику поведения как она задумана создателями, ибо в книгах ничего про это не пишут.
Итак, класс:
+++++++++++++++++++++++++++++++++++ Теперь я задался целью, если у нас обращение к переменой radius суть вызов либо функции присваивания либо функции чтения (а согласовываются они меж собой с помощью какой-то хитрой переменной __dius), так может вообще попытаться обойтись без этой переменной radius?
Вывод:
0
|
|||||||||||||||||||||
| 16.12.2018, 23:33 | |
|
Ответы с готовыми решениями:
17
Объект 'NoneType' не имеет атрибута 'name' self не имеет атрибута QuerySet не имеет атрибута name |
| 17.12.2018, 00:37 | |
|
Зачем Вы используете reload модуля Shap_p, у Вас что, большой проект с большим количеством модулей, и нельзя запустить сценарий сначала? При перезагрузке отдельного модуля, без перезапуска всего сценария, возникают свои нюансы.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||
| 17.12.2018, 00:47 [ТС] | |||||||
0
|
|||||||
| 17.12.2018, 01:01 | ||||||
|
Инициализация в классе у Вас какая то странная. Обычно в классах атрибуты экземплярам задают следующим образом:
И вообще мне не понятно, что Ваши методы должны делать. И почему оба метода имеют одно название?
0
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||
| 17.12.2018, 01:38 [ТС] | ||||
|
0
|
||||
|
Просто Лис
|
|||||||
| 17.12.2018, 08:43 | |||||||
![]() Вот правильный рабочий код:
0
|
|||||||
| 17.12.2018, 11:16 | |||||||||||
|
kravam, У Вас атрибут __dius отсутствует в методе инициализации __init__ или просто в классе, например
Добавлено через 24 минуты kravam, Методы, которые Вы определяете в классе в принципе не нужны. Что бы получить радиус без всякого метода достаточно ввести z.radius. А что бы установить новый радиус, достаточно ввести z.radius = 55
90 55
0
|
|||||||||||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
|||||||||||||||||
| 17.12.2018, 14:03 | |||||||||||||||||
1
|
|||||||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||||||||||||||
| 17.12.2018, 21:35 [ТС] | |||||||||||||||||||||||
Вы добавили в него строчку "self.__dius = 9". Типа ругается, что AttributeError: 'Circle' object has no attribute '_Circle__dius' (хотя как по мне _Circle__dius и __dius это разные переменные). Но закроем глаза на это пока. Ваш код:
0
|
|||||||||||||||||||||||
|
Просто Лис
|
||||||||||||
| 18.12.2018, 04:56 | ||||||||||||
Или так, если хотите явно вызвать сеттер:
Внимание на 4-ю строку.
1
|
||||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||
| 18.12.2018, 18:21 [ТС] | ||
|
0
|
||
|
Просто Лис
|
||||||
| 18.12.2018, 18:38 | ||||||
|
Запустите код — и увидите.
self.radius — это свойство, и сначала интерпретатор вызывает геттер, чтобы получить настоящее значение переменной (9), а уже полученное значение вызывает: 9.__call__(self, 78). И конечно же у тип int нельзя вызвать, потому и бросается исключение.
1
|
||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
||||||||||||||||||||||||||||||||||||
| 18.12.2018, 19:42 [ТС] | ||||||||||||||||||||||||||||||||||||
|
Правильно ли я вас понимаю, что в этом коде:
И палит имя self.radius. И это не имя функции потому, что хоть у нас и стоят такие вот определения функций с тем же именем radius:
++++++++++++++++++++++++++++++++++++++++ ++ И интерпретатора делает вывод что это какая-то там переменная self.radius Потом он её устанавливает, что ли (тут вызывается геттер для self.radius). Ну происходит, как если бы мы просто набрали:
А теперь вернёмся к тому, у чему хотели вернуться. Действительно, если мы вот этот вот декоратор @radius.setter уберём, то интепретатор расценит self.radius именно как вызов функции и так же и будет с ним работать:
0
|
||||||||||||||||||||||||||||||||||||
| 18.12.2018, 20:28 | |
|
Я так и не понял, зачем Вам нужен атрибут __dius, когда у Вас есть атрибут radius, в чем их различие, кроме имени? Хотя скажу честно, декораторы я еще не изучал. Это как то необходимо для декораторов?
0
|
|
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
|
| 18.12.2018, 21:07 | |
|
kravam, в целом верно всё поняли. Осталось вспомнить, что такое декоратор, точнее что он, вчастности, делает с именем (объектом), к которому применяется, и что возвращает property (и property.setter).
property - дескриптор. И property.setter возвращает (новый) экземпляр дескриптора property. Т.е. после применения декораторов в вашем классе нет методов radius, совершенно нет, будто их и не определяли вовсе, вместо этого имя radius ссылается на объект дескриптора, который перехватывает все обращения к данному имени. Кстати, метода __call__ у него нет.
1
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||||||||||||||||||
| 18.12.2018, 21:23 [ТС] | |||||||||||||||||||||||||||
|
Viktorrus, хорошо, что напомнили. Вернёмся к самому началу.
++++++++++++++++++++++++++++++++++++++++ +++++ И самый первый код:
Только один маленький вопрос остался. Почему не вызывается getter? Ну у меня один ответ- потому, что такой синтаксис, self.radius = 78 и при таком синтаксисе вызов геттера не происходит, хз почему. Может, оно и не надо, ведь getter нужен, когда мы что-то возвращаем себя, а тут ничего не возвращаем, а просто устанавливаем значение. В общем так:
0
|
|||||||||||||||||||||||||||
| 19.12.2018, 00:28 | ||
|
Вы начали все по новой, я все по новой объяснять не буду.
Лутц М. Изучаем Python Лутц М. Программирование на Python. Том 1, 2 Если хотите разобраться, то изучайте их, там все ответы на Ваши вопросы ![]() Добавлено через 1 минуту Дальше что то Вам объяснять, когда Вы не знаете основ, я не вижу смысла. Удачи.
0
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||
| 19.12.2018, 15:53 [ТС] | |||
|
А так-то у меня всё есть- лутц и мутц, ещё кто. Если бы я сказал, что читал лутца, вы бы меня ещё куда отправили. Старо, как мир.
0
|
|||
| 19.12.2018, 15:53 | |
|
Помогаю со студенческими работами здесь
18
Какую связь имеет запущенная программа со своим исполняемым файлом? Почему его нельзя удалить? 2. Какую структуру имеет объект динамического класса, в чем заключаются его особенности? 3. Объясните Особенности Исполн В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться Имеет ли магнитное поле свой спектр излучения, так имеет ли обыкновенный магнит свой спектр излучения? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|