|
8 / 7 / 6
Регистрация: 13.02.2016
Сообщений: 180
|
|||||||||||
Пропавший атрибут self у экземпляра класса06.03.2018, 14:55. Показов 1506. Ответов 8
Метки нет (Все метки)
Управляющая программа:
вывод терминала: Traceback (most recent call last): File "usetest", line 3, in <module> import alfalist as alf File "/home/user/python/alfalist.py", line 27, in <module> class Direct: File "/home/user/python/alfalist.py", line 132, in Direct def GenTrans(self,box=self.bd): NameError: name 'self' is not defined Почему отсутствует self, когда в конструкторе он задан? И что сделать чтобы код работал?
0
|
|||||||||||
| 06.03.2018, 14:55 | |
|
Ответы с готовыми решениями:
8
Как можно изменить атрибут экземпляра одного класса при добавлении/изменении экземпляра другого класса
Создание экземпляра класса - наследника экземпляра другого класса |
|
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
|
||||||
| 06.03.2018, 15:05 | ||||||
|
Так можно
1
|
||||||
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
|
||||||
| 06.03.2018, 18:03 | ||||||
|
наверно лучше так, на то он и класс.
2
|
||||||
|
395 / 123 / 48
Регистрация: 26.10.2013
Сообщений: 734
|
|
| 09.03.2018, 10:53 | |
|
переменная `self.bd` появится только после инициализации класса, а инициализация метода `def GenTrans(self,box=self.bd)` (да и любых объектов) происходит при загрузке модуля, а при загрузке модуля ты вот никак не можешь обратиться к self, потому что его еще не существует.
2
|
|
|
8 / 7 / 6
Регистрация: 13.02.2016
Сообщений: 180
|
||||||
| 09.03.2018, 13:47 [ТС] | ||||||
|
почему инициализация метода происходит при загрузке модуля, если это метод класса? по идее же инициализация метода должна происходить при инициализации класса?
запиливаю предыдущий код с комментами:
ну и стандартный вопрос - если я не так понимаю где можно про это почитать на русском(если книжка большая, например Марк Лутц Изучаем Питон то с указанием главы, если можно). Добавлено через 7 минут разьве класс не инициализируется при создании экземпляра? Добавлено через 5 минут Semen-Semenich, box не обязательно равна self.bd
0
|
||||||
|
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
|
|
| 09.03.2018, 13:51 | |
|
0
|
|
|
8 / 7 / 6
Регистрация: 13.02.2016
Сообщений: 180
|
|||||||||||
| 09.03.2018, 14:11 [ТС] | |||||||||||
|
это значение по умолчанию.
то есть пр вызове:
0
|
|||||||||||
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
||||||
| 09.03.2018, 14:50 | ||||||
Сообщение было отмечено zerkalo как решение
Решение
Код на питоне выполняется последовательно, строчка за строчкой. Класс (объект типа/экземпляр type) создаётся при выполнении модуля, когда интерпритатор исполняет иинструкцию class. Тело класса выполняется практически так же как и код верхнего уровня, за исключением того, что все имена и новосозданные объекты (точнее ссылки на них) запихиваются в __dict__ класса (личное пространство имен), а не модуля (глобальное пространство имен). На этом этапе методы - обычные функции, они даже не знают, что принадлежат какому-то классу. Параметр self - ссылка на инстанс класса, которая, разумеется, не существует пока этот самый инстанс не будет создан. На самом деле имя self - соглашение. В строке
def GenTrans(self, box=self.bd): self как первый параметр и self в self.bd - разные вещи; первый - просто имя в локальной области создаваемой функции, второй - исполняемый код, - питон будет искать имя self в глобальном пространстве имен (в данном случае), и, если его нет, бросит исключение.
1
|
||||||
|
8 / 7 / 6
Регистрация: 13.02.2016
Сообщений: 180
|
|
| 09.03.2018, 15:01 [ТС] | |
|
shsv, благодарю, теперь ясно.
0
|
|
| 09.03.2018, 15:01 | |
|
Помогаю со студенческими работами здесь
9
Почему при вызове метода у экземпляра класса он сначала ищет у экземпляра Создание экземпляра класса, разрушение экземпляра класса
Создание нового экземпляра дочернего класса из экземпляра базового Сложение экземпляра базового класса и экземпляра наследника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|