Найти - Пользователи
Полная версия: Ссылка на атрибут класса через переменную
Начало » Python для новичков » Ссылка на атрибут класса через переменную
1 2
xkein
(не уверен, что правильно назвал тему )
есть экземпляр класса (диалогового окна ), созданный командой
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 ?
Rodegast
Не нужно делать таких вещей, это ведёт к сильной связанности между частями программы. Но ты же всё равно не будешь меня слушать и продолжишь заниматься глупостями, по этому вот так:
 var = "employ"
employ = getattr(inputDialog, var)
xkein
спасибо, попробую!
насчет глупостей - не спорю, этот способ взял из учебных примеров, там такого много мусолится ..
не дадите ссылку на примеры, где есть более традиционное решение ?
Rodegast
Нужно не смотреть примеры, а изучать ООП и практиковаться. Без этого нормальным разработчиков мне стать. Почитай книгу Грэди Буч “Объектно-ориентированный анализ и проектирование с примерами приложений” она наиболее адекватна. Там примеры на C++ на это внимание не обращай тебе они не нужны.
xkein
неожиданный совет, думал, что эту книгу давно можно выбросить
Rodegast
Вот когда ООП устареет, тогда и можно будет её выбросить. А сейчас она более чем актуальна.
py.user.next
xkein
Rodegast
Почитай книгу Грэди Буч
неожиданный совет, думал, что эту книгу давно можно выбросить
У него книжки не для новичков. Если ты опытный, то читаешь его. Мышление нужно иметь уже к началу чтения, понимать, что SOLID и GoF-шаблоны погоды не делают. Также UML не поможет, так как нужно понимать, что это не просто набор простых картинок. То есть за всем этим что-то стоит, и нужно понимать этот бэкграунд. А как узнать бэкграунд? Нужно пропрограммировать несколько лет и прочувствовать на себе все проблемы.

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

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

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

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

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

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

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

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

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

Не думаю. Книга достаточно понятная и UML-а там практически нет.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB