Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 9, 2025 14:48:21

xkein
Зарегистрирован: 2020-09-22
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

(не уверен, что правильно назвал тему )
есть экземпляр класса (диалогового окна ), созданный командой
inputDialog = employ_request_wind()
в частности в данном случае команда
print('inputDialog:', type(inputDialog), inputDialog)
выведет:

inputDialog:
<class ‘__main__.employ_request_wind’>
<__main__.employ_request_wind(0x1cf6f53c8b0, name=“Dialog”) at 0x000001CF6CE41C80>

нужно создать ссылку на виджет одного поля, содержащего в данном классе окна
например - поле employ
синтаксически (“ручной код ”) будет просто через точку
inputDialog.employ
тогда
print('inputDialog.employ: ‘, type(inputDialog.employ), inputDialog.employ)

inputDialog1.employ:
<class ’PySide6.QtWidgets.QComboBox'>
<PySide6.QtWidgets.QComboBox(0x1cf6f53bff0, name=“employ”) at 0x000001CF6CE7A600>

как построить программно это выражение , когда поле содержится переменной?

т.е.
если руками, то inputDialog.employ
а как это сделать через переменную ?
если экземпляр класса в inputDialog , а поле в переменной field = ‘employ’ - > как написать выражение, чтобы результат был аналогичным записи inputDialog.employ ?

Офлайн

#2 Июнь 9, 2025 15:12:37

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2828
Репутация: +  185  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

Не нужно делать таких вещей, это ведёт к сильной связанности между частями программы. Но ты же всё равно не будешь меня слушать и продолжишь заниматься глупостями, по этому вот так:

 var = "employ"
employ = getattr(inputDialog, var)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#3 Июнь 9, 2025 15:26:26

xkein
Зарегистрирован: 2020-09-22
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

спасибо, попробую!
насчет глупостей - не спорю, этот способ взял из учебных примеров, там такого много мусолится ..
не дадите ссылку на примеры, где есть более традиционное решение ?

Офлайн

#4 Июнь 9, 2025 17:14:13

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2828
Репутация: +  185  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

Нужно не смотреть примеры, а изучать ООП и практиковаться. Без этого нормальным разработчиков мне стать. Почитай книгу Грэди Буч “Объектно-ориентированный анализ и проектирование с примерами приложений” она наиболее адекватна. Там примеры на C++ на это внимание не обращай тебе они не нужны.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#5 Июнь 9, 2025 18:46:58

xkein
Зарегистрирован: 2020-09-22
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

неожиданный совет, думал, что эту книгу давно можно выбросить

Офлайн

#6 Июнь 9, 2025 19:57:30

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2828
Репутация: +  185  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

Вот когда ООП устареет, тогда и можно будет её выбросить. А сейчас она более чем актуальна.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#7 Июнь 10, 2025 06:46:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

xkein
Rodegast
Почитай книгу Грэди Буч
неожиданный совет, думал, что эту книгу давно можно выбросить
У него книжки не для новичков. Если ты опытный, то читаешь его. Мышление нужно иметь уже к началу чтения, понимать, что SOLID и GoF-шаблоны погоды не делают. Также UML не поможет, так как нужно понимать, что это не просто набор простых картинок. То есть за всем этим что-то стоит, и нужно понимать этот бэкграунд. А как узнать бэкграунд? Нужно пропрограммировать несколько лет и прочувствовать на себе все проблемы.

Так вот, затрагивая поле, ты нарушаешь инкапсуляцию. Выглядит это просто, а превращается в итоге в ворох проблем. С объектами надо работать так, будто это чёрные ящики с неизвестными внутренностями, на которых снаружи есть кнопки. Соответственно, если тебе нужно это поле, то снаружи объекта должна быть кнопка, которая даёт тебе это поле. И обращаться к полю можно только через эту наружнюю кнопку, которая находится во внешнем интерфейсе объекта.

Ты же, чтобы посмотреть телевизор, не раскручиваешь его? Ты просто нажимаешь на кнопку “включить”, потом на кнопку “выбрать канал”. А телевизор при этом сам там что-то внутри у себя делает. При этом можно даже сделать ему полностью прозрачный корпус и видеть внутренности. Но при этом ты им управляешь всё равно через эти кнопки наружние. Это вот разница между сокрытием и инкапсуляцией.



Отредактировано py.user.next (Июнь 10, 2025 06:47:43)

Офлайн

#8 Июнь 10, 2025 16:10:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2828
Репутация: +  185  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

> У него книжки не для новичков

Если книга для новичков это комикс с картинками, то да, там их недостаточно. А в остальном книга вполне подходит для новичка.

> Так вот, затрагивая поле, ты нарушаешь инкапсуляцию

Причём тут инкапсуляция? Это значит что у него внятного интерфейса нет.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#9 Июнь 10, 2025 17:38:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

Rodegast
Если книга для новичков это комикс с картинками, то да, там их недостаточно.
Не в картинках дело. Дело в том, какой мозг нужен, чтобы её понять. Для новичка эта книжка будет казаться морем воды какой-то бессмысленной.

Это вот есть газета “Труд” и есть книжка “Три поросёнка”. Если ты дашь газету “Труд” ребёнку и там будет написано про поросят в инженерном отделе, которые сорвали запуск ракеты в космос, то ребёнок не поймёт, где жили эти поросята и что они ели, в каких домиках они жили, и вообще про что речь идёт. Как поросята могли сорвать запуск? То есть для этого нужны взрослые мозги. Тогда будет всё понятно.

Вот тут так же всё обстоит. Если новичок думает, что UML - это просто набор картинок, то описать что-то вменяемое он не сможет, спроектировать модель, описать иерархию классов, особенно если её ему никто не рассказал, не принёс на блюдечке. Потому что UML - это язык для записи того, что ты придумал. Это как ручка, которой можно только записать какой-то текст. А вот о чём этот текст, зависит от автора. От ручки содержимое текста и его глубина не зависят, хоть ты там сто страниц испиши ею.

Нужно уже всё знать, чтобы книжки Буча читать. Тогда будет профит от этого.

Rodegast
Причём тут инкапсуляция? Это значит что у него внятного интерфейса нет.
Он лезет во внутренности объекта. Значит, он не знает про инкапсуляцию. Просто не знает о таком понятии даже.



Отредактировано py.user.next (Июнь 10, 2025 17:45:04)

Офлайн

#10 Июнь 10, 2025 18:39:02

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2828
Репутация: +  185  -
Профиль   Отправить e-mail  

Ссылка на атрибут класса через переменную

> Дело в том, какой мозг нужен, чтобы её понять.

Не думаю. Книга достаточно понятная и UML-а там практически нет.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version