|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|||||||||||||||||||||
Объект не имеет атрибута, хотя он его имеет. Почему так?16.12.2018, 23:33. Показов 13137. Ответов 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. Объясните Особенности Исполн В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты начинают двигаться Имеет ли магнитное поле свой спектр излучения, так имеет ли обыкновенный магнит свой спектр излучения? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|