Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 3, 2022 08:10:08

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

ZerG
Я скажу что за
class class1() следует зажимать пальцы в тиски и проводить особо жестокие пытки
Так же скажу что вы пытаетесь интуитивно понять то - что нужно знать как отче наш.
Для чего нужно таки почитать книжку. В разделе про переменные и классы детально все рассказываеться

Так же для самообразования - попробуйте испольовать не запуск скрипта а любой дебаггер.
Вот в дебаггере как раз выполняя строку за строкой увидите как меняеться айди любого обьекта в зависимости от действия над оным.
Хорошие дебаггеры есть в пишарме и vscode
Но рекомендую прочесть М.Лутца - раздел классы от корки до корки.
Поверьте - это секономит вам кучу времени и в следующий раз взглянув на свой же вопрос
вы хлопните себя по лбу ладошкой и в слух произнесете что-то типа
Капец я лосяра… все ж написано и понятно как день!

Всего вам доброго! Взял я вчера в руки книгу М.Лутца, налил себе горячего кофейку и приступил к увлекательному изучению, но не дойдя до главы “Классы” наткнулся на “Глава 6. Интерлюдия о динамической типизации……………….. 194” прямо в оглавлении. Естественно я кинулся к этой главе, так как мой вопрос в динамике процесса и состоял. Не буду цитировать главу полностью, думаю, и так ясно о чем там речь. Приведу только одно предложение “В языке Python это называется разделяемая ссылка – несколько имен ссылаются на один и тот же объект.” Из чего следует, что ответ на мой вопрос:
m1r42
Я правильно понимаю, что в моей конструкции c = x или c = y это всего лишь присвоение еще одного имени экземпляру класса. И обращаясь к нему по имени “c” по сути я имею дело с “x” или “y”. По крайней мере при работе программы это выглядит именно так.
прост на столько на сколько это возможно - ДА, ТЫ ПРАВ! только описал это своими словами, а не из умной книжки. с - это всего лишь новая ссылка на объект и Python тем и хорош, что так можно делать.
По поводу IDLE скажу, что сознательно их не использую, так как это упрощает процесс, а моя задача получить как можно больше вопросов, чтобы потом найти на них ответы, так я лучше запоминаю. И еще, да, вчера я так и сделал: хлопнул ладошкой по лбу и сказал: Капец, как все просто, все написано и понятно как день!
Благодарю за книгу вас за рекомендацию и в особенности М.Лутца за максимально понятное изложение!

Офлайн

#2 Ноя. 3, 2022 08:22:43

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

py.user.next
Так что ты даже когда термин “наследование” используешь, ты не понимаешь, о чём говоришь, потому что просто ничего не знаешь, так как не читал никаких книг особо. Поэтому тебе и говорят, что тебе ООП не нужно на данном этапе, ты его не поймёшь ещё пока что, даже если там сто кодов напишешь с ним. ООП - слишком обширная и объемлющая тема; немногие опытные программисты понимают её даже (хоть и знают синтаксис записи), и из-за этого у них ООПшных программ нет (программ размером в 20000 и более строк), а они этого даже не замечают, просиживая за компом десятки лет и всем рассказывая, какие они крутые асинхронные программисты. Хочется только улыбаться и плакать, сочувствуя им. Так что начинай с процедурок, на них можно всё написать, что тебе нужно и будет нужно в ближайшие три года. Если не можешь написать на процедурках и якобы тебе нужно ООП для этого, то это значит, что ты процедурки просто плохо освоил. Раньше все игры писали на процедурках и всё работало прекрасно. Тот же тетрис возьми, змёйку, крестики-нолики, морской бой, шахматы, гонки формулы один, - это всё писалось на процедурках.
Ну так ведь тем интереснее. Использую термин “наследование” неправильно, согласен, сегодня я уже это осознал. Именно для этого на форум и обратился чтобы поправили, направили как старшие братья. Почему использую ООП? Потому что интересно, потому что гениально и просто. Знаний не хватает, но это не проблема, пробелы будут заполнены, даже не сомневайтесь. “ООП - слишком обширная и объемлющая тема” - я бы так не сказал. Это больше похоже на страшилку для новичков. Призываю всех новичков в ООП не слушать умных дядек про ООП. Разбирайтесь, пробуйте, задавайте вопросы и ищите на них ответы и все будет хорошо.
Вам, всего хорошего, спасибо, что заглянули в мою тему и не оставили вопрос без внимания. Для этого форум и существует.

Отредактировано m1r42 (Ноя. 3, 2022 08:23:59)

Офлайн

#3 Ноя. 3, 2022 09:36:55

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

m1r42
В вашем же случае вы меняете переменную “a” в самом классе.
Нет не меняю

Офлайн

#4 Ноя. 3, 2022 10:00:47

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

xam1816
Нет не меняю
Меняете, вызывая класс MyClass('first') или MyClass('second').
Oбъект создается в момент вызова класса по имени, то в этот момент вызывается метод __init__()
__init__() устанавливает значение переменной self.a = a

Офлайн

#5 Ноя. 3, 2022 10:48:38

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

m1r42
Собственно вопрос в том можно ли вместо объекта установить некий шаблон, а в начале цикла только менять имя x на y и наоборот?

  
class MyClass:
	def __init__(self, a):
		self.a = a
obj_lst = [MyClass('first'), MyClass('Second')]
for i in obj_lst:
	print(i.a)

в самом классе нет атрибута a, он есть только у объекта. Поменять переменную как я понял в вашем понятии, изменить значение переменной a. Чтобы ее изменить нужен знак присвоения =.
Знак присвоения использовался один раз при создании объекта.Соответственно значение переменной больше не менялось.Атрибут а одного объекта это не тоже самое что и атрибут a другого. Т.е дом на ул.Ленина в Ульяновске не тот же самый дом на ул.Ленина в Казани.

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

Отредактировано xam1816 (Ноя. 3, 2022 11:18:07)

Офлайн

#6 Ноя. 3, 2022 11:12:15

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

xam1816
в самом классе нет атрибута a, он есть только у объекта. Поменять переменную как я понял в вашем понятии, изменить значение переменной a. Чтобы ее изменить нужен знак присвоения =.
Знак присвоения использовался один раз при создании объекта.Соответственно значение переменной больше не менялось.Атрибут а одного объекта это не тоже самое что и атрибут a другого. Т.е дом на ул.Ленина в Ульяновске не тот же самый дом на ул.Ленина в Казани.
Ок, с этим согласен. Создаете, по сути два объекта с атрибутом “a”, но эти объекты MyClass('first') и MyClass('second') получаются на этапе создания не имеют ссылок на себя. Мне же нужна ссылка на объект, чтобы через эту ссылку его использовать. В моем случае c = x либо c = y - это лучший вариант в динамике менять ссылку на мои объекты x и y.

Офлайн

#7 Ноя. 3, 2022 11:26:30

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

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

  
print(obj_lst[0]) # выведет например <__main__.MyClass object at 0x7f9f7e4d7970>

тоже самое если они в словаре, можно обратиться по ключу.
ну и просто присвоить переменной значение другой переменной

  
print(id(obj_lst[0])) # 140124746447216
a = obj_lst[0]
print(id(a)) # 140124746447216
c = a
print(id(c)) #140124746447216

Офлайн

#8 Ноя. 3, 2022 12:15:38

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Использование шаблона при обращении к объекту

xam1816
ну и просто присвоить переменной значение другой переменной
что и требовалось доказать, расходимся.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version