Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 13

Возврат экземпляра класса из функции

29.10.2020, 11:15. Показов 11623. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день!

Есть некоторый класс Class1.

Я создаю функцию, внутри которой создается экземпляр класса Inst. Как правильно вернуть этот экземпляр и все его атрибуты, чтобы им можно было пользоваться в дальнейшем?

return Inst - возвращает, как это правильно назвать, ссылку на экземпляр? <__main__.Class1 at 0x20abc9d0f10>

С ходу гугл не помог.

Понимаю, что такие вещи надо в книжках искать, но если кто-нибудь поможет - очень буду благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2020, 11:15
Ответы с готовыми решениями:

Как можно изменить атрибут экземпляра одного класса при добавлении/изменении экземпляра другого класса
Мне нужно, чтобы при создании города/деревни уже существующей области (т.е. уже создана область с таким названием) изменялись атрибуты...

Почему при вызове метода у экземпляра класса он сначала ищет у экземпляра
Всем привет, после прочтения Лутца про ООП появился такой вопрос почему при вызове метода у экземпляра класса он сначала ищет у экземпляра,...

Возврат экземпляра класса
Добрый день. Поясните пожалуйста как выполнить задание: Дан абстрактный класс прямоугольника Rectangle. А также интерфейс фабрики...

8
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
29.10.2020, 11:44
так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class Class1(object):
    def __init__(self, text):
        self.var1 = text
 
def func():
    g = Class1('text') # создали экземпляр класса 
    g.var1 = 'sometext' # изменили переменную в экземпляре класса
    return g # вернули экземпляр класса
 
j = Class1('other text') # создали новый экземпляр вне ф-ции
h = func() # вызвали ф-цию и результат ее работы (экземпляр класса) присвоили в h
print(j.var1) # смотрим что в экземпляре вне ф-ции
print(h.var1) # смотрим что в экземпляре от ф-ции
1
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 13
30.10.2020, 22:25  [ТС]
Цитата Сообщение от TAVulator Посмотреть сообщение
так?
TAVulator, Да, именно так я и попытался это реализовать, но видимо загвоздка не в этом.

Попробую чуть более детально описать ситуацию:

В теле основной программы есть функция:

Python
1
2
3
4
5
6
7
8
9
10
def FiberReturn():
    fiber1 = FiberFunction(100, 0.1, 0.0001, 1550*10**-(9), 1551*10**(-9), 1, 0.0001)
    fiber1.LightPropagation()
    fiber1.Fourier()
   
    ui.graphicsView_2.clear()
    ui.graphicsView_3.clear()
    ui.graphicsView_2.plot(np.real(fiber1.ffn))
    ui.graphicsView_3.plot(np.real(fiber1.fftstr))
    return fiber1
Соответственно создается экземпляр fiber1 и вызываются 2 метода, которые рассчитывают некоторые атрибуты. Класс FiberFunction загружается из модуля.

Далее внутри этой же функции рисуем графики атрибутов экземпляра. Они отображаются корректно.

Следующая функция:

Python
1
2
3
def OpenWindow():
    SignalWindow.show()
    uis.graphicsView.plot(np.real(fiber1.ffn),pen=2)
Обращается к атрибуту экземпляра, который был инициализирован при вызове первой функции. Но она это обращение "не видит".

И да, это все происходит внутри PyQt5 интерфейса, функции вызываются через нажатия кнопок. Я изначально подумал, что проблема именно в базовом подходе.

Если эта проблема возникает именно при работе внутри pyqt5 интерфейса, то прошу прощения и попрошу перенести тему.

Спасибо за уделенное время!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
31.10.2020, 00:14
Цитата Сообщение от 9FiZiK Посмотреть сообщение
uis.graphicsView.plot(np.real(fiber1.ffn ),pen=2)
Откуда эта функция берет экземпляр fiber1? Ты же нигде его прокидываешь сюда.
Из глобальной области что ли? Почему PyQT не завернуто в ООП?
Что делает .show()? Отрисовывает окно? Ее же всегда пишут последним вызовом.
0
Эксперт по компьютерным сетямЭксперт Pascal/Delphi
 Аватар для TAVulator
4191 / 1292 / 237
Регистрация: 27.07.2009
Сообщений: 3,962
31.10.2020, 08:05
как происходит вызов FiberReturn() ?
куда сохраняется результат этой ф-ции?
Вот как найдете в какую переменную охраняется результат ф-ции FiberReturn(), то смело подставляйте ее вместо fiber1 в
Цитата Сообщение от 9FiZiK Посмотреть сообщение
uis.graphicsView.plot(np.real(fiber1.ffn ),pen=2)
0
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 13
31.10.2020, 09:36  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Из глобальной области что ли?
Да, я думал что return возвращает в глобальную область и я смогу свободно использовать этот экземпляр.

Цитата Сообщение от Garry Galler Посмотреть сообщение
Почему PyQT не завернуто в ООП?
Вы имеете ввиду непосредственно функции нажатий кнопок?

Цитата Сообщение от Garry Galler Посмотреть сообщение
Что делает .show()? Отрисовывает окно? Ее же всегда пишут последним вызовом.
Да, отрисовывает окно, но в данном случае порядок оказывается не важным.


Сделал следующим образом:

Python
1
2
3
4
5
6
7
8
9
10
11
def FiberReturn():
    fiber1 = FiberFunction(1000, 0.1, 0.0001, 1550*10**-(9), 1551*10**(-9), 1, 0.0001)
    fiber1.LightPropagation()
    fiber1.Fourier()
    
    print(fiber1.fftstr[5], fiber1.fftnstr[5])
    
    ui.graphicsView_2.clear()
    ui.graphicsView_3.clear()
    ui.graphicsView_2.plot(np.real(fiber1.ffn))
    ui.graphicsView_3.plot(np.real(fiber1.fftstr))

Оставил в возврате только один из атрибутов, присвоив его предварительно в "x".

Вторую функцию переписал как:

Python
1
2
3
    def OpenWindow(x1):
        uis.graphicsView.plot(np.real(x1),pen=2)
        SignalWindow.show()

Python
1
ui.pushButton_6.clicked.connect(GUIFunc.FiberReturn) #вызов первой функции
Python
1
ui.pushButton_2.clicked.connect(GUIFunc.OpenWindow(x)) # Вызов второй функции
Если в теле я нигде не объявляю переменную "x", то мне пишет "Undefined name x"
либо если я опишу "x" как например x = 0, или global x - не важно

Пишет:

ui.pushButton_2.clicked.connect(GUIFunc. OpenWindow(x))

TypeError: argument 1 has unexpected type 'NoneType'

Добавлено через 40 минут


В предыдущем ответе немного неправильно написал



Python
1
ui.pushButton_6.clicked.connect(FiberReturn) #вызов первой функции
Python
1
ui.pushButton_2.clicked.connect(OpenWindow(x)) # Вызов второй функции

Если в теле я нигде не объявляю переменную "x", то мне пишет "Undefined name x"
либо если я опишу "x" как например x = 0, или global x - не важно

Пишет:

ui.pushButton_2.clicked.connect(OpenWind ow(x))

TypeError: argument 1 has unexpected type 'NoneType'
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
31.10.2020, 13:53
Цитата Сообщение от 9FiZiK Посмотреть сообщение
ui.pushButton_2.clicked.connect(OpenWind ow(x))
В clicked.connect передается не вызов функции, а сама функция.

P.S. У тебя проблема с созданием правильной структуры приложения. Неявные возвраты, обращение к global и т.д. до добра не доводят.

Добавлено через 38 минут
P.P.S. Если хочешь привязать x к функции без ее вызова используй functools.partial.
0
0 / 0 / 0
Регистрация: 06.10.2020
Сообщений: 13
31.10.2020, 14:00  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
В clicked.connect передается не вызов функции, а сама функция.
P.S. У тебя проблема с созданием правильной структуры приложения. Неявные возвраты, обращение к global и т.д. до добра не доводят.
Да, я это понимаю. Даже уже некоторые шаги сделал: завернул модуль в ООП. Но в данной проблеме не могу понять правильного подхода... Мои нативные представления говорят мне: напиши return x и пользуйся им, но не работает)

Не могли бы вы подсказать как будет правильно организовать основную программу? Либо где конкретно об этом можно почитать/посмотреть.

Как и внутри чего должен создаваться экземпляр, чтобы можно было его потом свободно вызывать?

Спасибо!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
31.10.2020, 14:26
Цитата Сообщение от 9FiZiK Посмотреть сообщение
но не работает)
Ну мы же не знаем как именно не работает.
Мы же не можем сходить на твой комп, взять твой код, запустить его и увидеть.
Из того что, ты представил - очевиден только структурный бардак.

Цитата Сообщение от 9FiZiK Посмотреть сообщение
Не могли бы вы подсказать как будет правильно организовать основную программу? Либо где конкретно об этом можно почитать/посмотреть.
Просто погугли, например, pyqt examples, что увидеть как люди пишут интерфейсы.
https://github.com/pyqt/examples

А по ООП нужно читать много толстых книжек...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2020, 14:26
Помогаю со студенческими работами здесь

Возврат имени экземпляра класса
Есть класс CLASS1, у него 2 экземпляра- ex1 и ex2. Нужно что бы при вызове метода в одном из экземпляров класса метод возвращал это самое...

Возврат функцией экземпляра класса
Подскажите, будет ли корректной с точки зрения выделения памяти и всего прочего такая запись: MyObject fun(....) { myObject Obj =...

Удаление экземпляра класса в функции самого класса (Ошибка при отладке)
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...

Как создать атрибут экземпляра класса в методе экземпляра класса?
Здравствуйте. Подскажите, как в javascript создать новый атрибут экземпляра класса в методе экземпляра? class YandexMap{ //...

Создание экземпляра класса - наследника экземпляра другого класса
Имеется два класса: класс Layer и класс-наследник Neuron. Я создал экземпляр класса Layer l1 и задал его свойства, теперь мне необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru