Форум сайта python.su
ZerG
Я скажу что за
class class1() следует зажимать пальцы в тиски и проводить особо жестокие пытки
Так же скажу что вы пытаетесь интуитивно понять то - что нужно знать как отче наш.
Для чего нужно таки почитать книжку. В разделе про переменные и классы детально все рассказываеться
Так же для самообразования - попробуйте испольовать не запуск скрипта а любой дебаггер.
Вот в дебаггере как раз выполняя строку за строкой увидите как меняеться айди любого обьекта в зависимости от действия над оным.
Хорошие дебаггеры есть в пишарме и vscode
Но рекомендую прочесть М.Лутца - раздел классы от корки до корки.
Поверьте - это секономит вам кучу времени и в следующий раз взглянув на свой же вопрос
вы хлопните себя по лбу ладошкой и в слух произнесете что-то типа
Капец я лосяра… все ж написано и понятно как день!
m1r42прост на столько на сколько это возможно - ДА, ТЫ ПРАВ! только описал это своими словами, а не из умной книжки. с - это всего лишь новая ссылка на объект и Python тем и хорош, что так можно делать.
Я правильно понимаю, что в моей конструкции c = x или c = y это всего лишь присвоение еще одного имени экземпляру класса. И обращаясь к нему по имени “c” по сути я имею дело с “x” или “y”. По крайней мере при работе программы это выглядит именно так.
Офлайн
py.user.nextНу так ведь тем интереснее. Использую термин “наследование” неправильно, согласен, сегодня я уже это осознал. Именно для этого на форум и обратился чтобы поправили, направили как старшие братья. Почему использую ООП? Потому что интересно, потому что гениально и просто. Знаний не хватает, но это не проблема, пробелы будут заполнены, даже не сомневайтесь. “ООП - слишком обширная и объемлющая тема” - я бы так не сказал. Это больше похоже на страшилку для новичков. Призываю всех новичков в ООП не слушать умных дядек про ООП. Разбирайтесь, пробуйте, задавайте вопросы и ищите на них ответы и все будет хорошо.
Так что ты даже когда термин “наследование” используешь, ты не понимаешь, о чём говоришь, потому что просто ничего не знаешь, так как не читал никаких книг особо. Поэтому тебе и говорят, что тебе ООП не нужно на данном этапе, ты его не поймёшь ещё пока что, даже если там сто кодов напишешь с ним. ООП - слишком обширная и объемлющая тема; немногие опытные программисты понимают её даже (хоть и знают синтаксис записи), и из-за этого у них ООПшных программ нет (программ размером в 20000 и более строк), а они этого даже не замечают, просиживая за компом десятки лет и всем рассказывая, какие они крутые асинхронные программисты. Хочется только улыбаться и плакать, сочувствуя им. Так что начинай с процедурок, на них можно всё написать, что тебе нужно и будет нужно в ближайшие три года. Если не можешь написать на процедурках и якобы тебе нужно ООП для этого, то это значит, что ты процедурки просто плохо освоил. Раньше все игры писали на процедурках и всё работало прекрасно. Тот же тетрис возьми, змёйку, крестики-нолики, морской бой, шахматы, гонки формулы один, - это всё писалось на процедурках.
Отредактировано m1r42 (Ноя. 3, 2022 08:23:59)
Офлайн
m1r42Нет не меняю
В вашем же случае вы меняете переменную “a” в самом классе.
Офлайн
xam1816Меняете, вызывая класс MyClass('first') или MyClass('second').
Нет не меняю
Офлайн
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)
Отредактировано xam1816 (Ноя. 3, 2022 11:18:07)
Офлайн
xam1816Ок, с этим согласен. Создаете, по сути два объекта с атрибутом “a”, но эти объекты MyClass('first') и MyClass('second') получаются на этапе создания не имеют ссылок на себя. Мне же нужна ссылка на объект, чтобы через эту ссылку его использовать. В моем случае c = x либо c = y - это лучший вариант в динамике менять ссылку на мои объекты x и y.
в самом классе нет атрибута a, он есть только у объекта. Поменять переменную как я понял в вашем понятии, изменить значение переменной a. Чтобы ее изменить нужен знак присвоения =.
Знак присвоения использовался один раз при создании объекта.Соответственно значение переменной больше не менялось.Атрибут а одного объекта это не тоже самое что и атрибут a другого. Т.е дом на ул.Ленина в Ульяновске не тот же самый дом на ул.Ленина в Казани.
Офлайн
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
Офлайн
xam1816что и требовалось доказать, расходимся.
ну и просто присвоить переменной значение другой переменной
Офлайн