0 / 0 / 0
Регистрация: 28.12.2018
Сообщений: 35
|
|
1 | |
Объясните значение метода _init_ и параметр self07.01.2019, 15:40. Показов 22353. Ответов 24
Метки нет (Все метки)
0
|
07.01.2019, 15:40 | |
Ответы с готовыми решениями:
24
Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)? Объясните понятие "параметр" функции/метода Объясните значение метода SetFIO Создание метода класса Init при формировании отчёта в режиме 1 с выявляется ошибка метода контекста.Недопустимое значение параметра (параметр №1) |
1290 / 675 / 365
Регистрация: 07.01.2019
Сообщений: 2,277
|
|
07.01.2019, 16:22 | 2 |
метод __init__ вызывается при создании объекта класса, self для обращения в переменным и методам объекта
0
|
0 / 0 / 0
Регистрация: 28.12.2018
Сообщений: 35
|
|
07.01.2019, 16:51 [ТС] | 4 |
0
|
4975 / 1003 / 144
Регистрация: 29.01.2013
Сообщений: 5,916
|
|
07.01.2019, 16:58 | 5 |
нет, в нём описаны инструкции, которые выполняются при создании каждого экземпляра класса. Если вы знакомы с ООП в рамках других языков, то __init__ - это конструктор.
1
|
07.01.2019, 17:38 | 6 |
Это неверно. Экземпляр класса создается до вызова метода __init__. В __init__ он лишь инициализируется некими значениями. Поэтому это не конструктор, а инициализатор.
1
|
Alli_Lupin
|
07.01.2019, 18:03
#7
|
Не по теме: Рекомендованный Вами Лутц. Издание 4-е, страница 718. Однако имеется один метод перегрузки оператора, который можно встретить практически в любом классе: метод __init__, который известен как конструктор и используется для инициализации состояния объектов. Методу __init__ следует уделить особое внимание, потому что он, наряду с аргументом self, является одним из ключей к пониманию ООП в языке Python. И во всех языках инструкции конструктора выполняются после создания объекта. Хотя бы потому что являются переопределением конструктора самого класса Object.
0
|
07.01.2019, 18:22 | 8 |
Лутц упрощает, дабы не вводить в ступор новичков. Никто не запрещает называть __init__ конструктором. Но изучив python чуть глубже вы узнает о существовании метода __new__, который и создает экземпляр.
Вы неверно объяснили суть метода __init__ - даже с учетом упрощенной подачи у Лутца - и я поправил.
1
|
0 / 0 / 0
Регистрация: 28.12.2018
Сообщений: 35
|
||||||
07.01.2019, 20:20 [ТС] | 9 | |||||
у меня еще один вопрос назрел, что такое экземпляр? Я так поняла это переменная которой присваивается класс
0
|
07.01.2019, 21:19 | 10 |
Переменная это просто имя с которым связывается некоторое значение.
Значением переменной, разумеется, может быть и экземпляр класса. Но переменная != экземпляр. Если копнуть чуть глубже - переменная это еще и ящик для хранения, потому что связана с указателем на некоторую область памяти. И хранить она может что угодно. А экземпляр какого-то класса это объект сконструированный этим классом и обладающий определенными свойствами\атрибутами.
1
|
07.01.2019, 21:34 | 11 |
Каша в голове? Что Вы по Вашему называете "созданием" ?
Инициализация то же как бы часть создания/конструирования. Для большинства языков например С/С++ обычно выделяют "выделение памяти" и "инициализацию" (этой самой памяти значениями") . Но с учетом того что память может выделяться (и освобождать) по разному и может быть "вложенность" объектов одного в другой, то все не так просто. Добавлено через 5 минут Переменной-ссылкой на экземпляр, но с учетом того что в питоне все "ссылки" то да можно опустить и говорить что это экземляр.
1
|
0 / 0 / 0
Регистрация: 28.12.2018
Сообщений: 35
|
||||||
07.01.2019, 22:01 [ТС] | 12 | |||||
Avazart, можете проверить правильность написания кода? Программа работает, но интересно я написала как положено или он на костылях?
Задание: Ресторан: создайте класс с именем Restaurant. Метод __init__() класса Restaurant должен содержать два атрибута: restaurant_name и cuisine_type. Создайте метод describe_ restaurant(), который выводит два атрибута, и метод open_restaurant(), который выводит сообщение о том, что ресторан открыт.
0
|
07.01.2019, 22:54 | 13 | ||||||||||
Да вроде все верно если делать поправку что это очередное глупое учебное задание.
Но в чем проблема, каков смысл этого класса? Как его предполагается использовать? Это вопросы к больше к составителю задания... Зная этом можно сказать точно правильно или нет. А так это это бессмысленная трата времени. Добавлено через 4 минуты
Лучше в место метода перегрузить методы __str__ и __repr__ Использование print внутри класса плохой стиль, это делает класс монолитным и лишает его гибкости. Что к примеру если мы захотим выводить его не в консоль, а к примеру в файл?
0
|
08.01.2019, 00:39 | 14 | |||||
Alycia, Что бы понять ООП (объектно ориентированное программирование) нужно обратится к реальности, а точнее к реальному мышлению человека. ООП просто моделирует часть реального мышления человека. Вы ведь в школе изучали виды животных, их классы и подклассы. Например класс парнокопытных и его подкласс коза. Когда мы говорим о козе абстрактно, то оперируем понятием коза принимая во внимание ее свойства, которые присущи всем козам, (рога, копыта, шерсть, цвет, 2 глаза, 4 ноги и так далее), а так же что может делать коза ( в питоне это методы). Например давать молоко, давать шерсть, питаться травой и т.д. Так вот такое обобщенное понятие козы соответствует self в питоне. Класс в питоне может описать класс коз в реальности. Конкретные козы в реальности это экземпляры класса class козы() в питоне. А self для класса "козы" в питоне, соответствует обобщенному понятию козы в мышлении человека.
С помощью инструкции __init__ мы описываем какие свойства у любого экземпляра класса должны быть, И так как это для всех экземпляров класса, то мы эти свойства (атрибуты) присваиваем обобщенному объекту self. То есть те свойства (атрибуты), которыми обладает обобщенный объект класса "козы" self, обладают все конкретные экземпляры этого класса, то есть конкретные козы. Но конкретным козам (экземплярам) могут принадлежать и свои индивидуальные свойства (атрибуты), например пятно на боку, которые не принадлежат другим козам и потому отсутствую у обобщенной козы ( в питоне обозначаемой self). Написал много, но что не понятно, то задавайте вопросы. Добавлено через 6 минут Но сразу замечу, что классы в питоне не строго ответствуют классическим классам в мышлении человека в плане наследования и общих для класса свойств. Но пока не забивайте себе этим голову, эту особенность поймете потом, при углубленном изучении классов. Добавлено через 50 минут Добавлю немного про про объекты в питоне и про переменные в нем. Объекты в питоне, это выделенная область в памяти компьютера содержащая определенную информацию, как то числа , экземпляры классов с их атрибутами , словари, списки , строки, файлы и так далее. Для этих объектов обычно существуют переменные, которые содержат ссылки на эти объекты и ничего более. В этом отличие питон от других языков. В других языках переменная является именем конкретной области в памяти где находится информация, и поэтому в тех языках переменная требует объявления с указанием типа. В питоне все по другому. переменная не привязана жестко с областью памяти а только содержит ссылку на некоторый объект в области памяти. Мы можем поменять ссылку в переменной, что бы она ссылалась на другой объект любого типа. Именно поэтому для переменных в питоне не присваивается изначально тип. Любая переменная может перенаправляться ссылкой на любой объект любого типа. Классы в питоне, это объекты. Имя класса, это переменная содержащая ссылку на объект класса в памяти компьютера. Экземпляр класса, это тоже объект. Кстати такая тонкость.
Создание объекта экземпляра происходит когда мы обращаемся через переменную Super к объекту класса применяя круглые скобки. Запись Super('spam') создает экземпляр этого класса (объект в памяти) с атрибутом data и его значением 'spam'. Но при этом нет переменной, которая бы на него ссылалась. В некоторых случаях этот прием используется, когда в выражение подставляется не переменная ссылающаяся на экземпляр, а сам экземпляр без имени. Для того же что бы получить переменную со ссылкой на этот объект экземпляра, необходима следующая запись. x = Super('spam'). Тогда переменная x будет иметь ссылку на этот экземпляр и через нее мы можем к нему обращаться. Пока все. Какие будут еще вопросы, обращайтесь.
4
|
08.01.2019, 00:42 | 15 |
А я бы крайне советовал избегать такого подхода.
И советовал бы относиться к ООП как к инструменту, не более без всякой метафизической ерунды. Это лишь инструмент позволяющий выразить свои мысли в коде, не более. И этот инструмент как и любой другой можно использовать не правильно, вместо упрощения кода - усложнять его. Или вообще просто писать бессмысленный код как Ваше учебное задание.
1
|
08.01.2019, 06:07 | 16 | |||||||||||||||
Avazart, Avazart, А я бы Вам советовал не переоценивать себя и не считать себя умнее других. Я знаю, что могу ошибаться, а вот Вы похоже про себя такого не думаете и готовы с ходу начать учить других. Удачи Вам в самоутверждении. Поучитесь, как должен себя вести истинный профессионал у Garry Galler. Извините , если был грубоват.
Добавлено через 1 час 44 минуты Alycia, По поводу Вашего примера
В задании Вас просят только создать класс с заданной структурой. Проверку созданного класса Вы видимо придумали сами. Я бы проверку сделал так
Our restaurant is name Claude Monet Our cuisin is French Claude Monet Restaurant open from 9:00 am Добавлено через 21 минуту Кстати по поводу использования методов перегрузки __str__ и __repr__, использование их на начальной стадии обучения излишне. В свое время когда дойдете до их изучения , то тогда и освоите зачем и как их использовать. У М.Лутца целая глава посвящена изучению методов перегрузки операторов.
0
|
08.01.2019, 11:17 | 17 |
А я советую применить этот Ваш совет к самому себе прежде чем что либо озвучивать...
Добавлено через 9 минут А типа в маленьких проектам есть право гавнокодить? Типа "делать сразу правильно" это излишне? По Вашему лучше делать неправильно и потом переучиваться? Добавлено через 3 минуты Я бы сказал куда такое задание можно ...
1
|
08.01.2019, 16:41 | 18 |
Avazart, Не хотел отвечать, но не удержался
На уровне начинающего это не является неправильным, просто ограниченно областью применения в соответствии с теми задачами, которые решает начинающий.
Если следовать Вашим советам то учащихся в первом классе сразу нужно учить высшей математике, что бы по Вашему все было правильно, с учетом самых сложных задач математики? Сомневаюсь, что кто то из них после этого что либо освоит и станет профессиональным математиком. Для того, что бы учить других, мало быть профессионалом в своей области, нужно еще быть профессионалом в преподавательской деятельности. Все больше в дискуссию с Вами не вступаю, Вы все равно не понимаете о чем я говорю.
0
|
08.01.2019, 20:42 | 19 |
Нужно учить не математики, а умению мыслить и придерживать принципов которые которые этому помогают.
Иначе получите бездарей думающих что "на ноль делить нельзя". Так обычно говорят бездари ничего не достигшие в своей области, "сам не умеешь - учи других".
0
|
0 / 0 / 1
Регистрация: 19.09.2016
Сообщений: 11
|
||||||
13.02.2020, 04:06 | 20 | |||||
0
|
13.02.2020, 04:06 | |
13.02.2020, 04:06 | |
Помогаю со студенческими работами здесь
20
Передача метода в метод, метода как параметр Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода Ошибка при загрузке Ubuntu 14.04 LTS: run-init: /sbin/init: Permission denied не берётся значение из init param Объясните 3й параметр Объекты: параметр-значение и параметр-переменная Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |