Conversation
| #примает, хранит и обрабатывает координаты вершин многоугольника | ||
| #в виде кортежей (x,y), | ||
| # начиная от первой самой левой и нижней и далее по часовой чтрелке | ||
| polygon_vertices = () |
There was a problem hiding this comment.
Зачем вы сюда эту строоку поместили?) на вебинаре прошлом же обсуждали, что не стоит так делать
There was a problem hiding this comment.
И все-таки, какие-то, соглашения относительно правил работы программы, стоит всегда оговаривать,. Например, также как оговорить что обозначает каждая из передаваемых в программу переменная, чтобы не не рыскать по всему тексту программы, пытаясь понять почему программа работает не "так".
| class Triangle(Polygon): | ||
| side1 = 0 | ||
| side2 = 0 | ||
| side3 = 0 |
There was a problem hiding this comment.
никогда так не делайте! в python это значит не тоже самое, что в других языках! вы тут объявили 3 переменные, которые существуют в классе(!) а не в объекте - то есть статические переменные.
There was a problem hiding this comment.
Да, согласен был не прав! Не подумал о статичности!
| area = 0 | ||
| hight = 0 | ||
| Tapezoid_perimeter = 0 | ||
| self.side1 = Polygon.sidesize(self, self.polygon_vertices[0], self.polygon_vertices[1]) |
There was a problem hiding this comment.
здесь необходимо весь код поместить в init
There was a problem hiding this comment.
Вообще-то я понадеялся на init базового класса Polygon, или init у потомков все равно должно быть свое?! Ведь здесь ничего, кроме того, чтобы запомнить координаты n-вершин, других действий нет. Или я опять чго-то не понимаю?! ;о(
There was a problem hiding this comment.
Нет, действительно, не понимаю. Пусть переменные статические, и в классе. Все равно, ведь хранение их и должно быть в потомке-объекте, с обращением по 'self''. Ведь доже если будет другой потомок, тоже использующий класс Polygon у него же будет свой 'self'?!!
There was a problem hiding this comment.
объекты хранятся в self, а self - это ссылка на объект, к self в классе можно обращаться только в методах. Расскажу сегодня ещё раз
There was a problem hiding this comment.
То, есть, все необходимые классу(потомку) переменные нужно "объявить" или правильнее инициализировать в init тогда они будут существовать в экземпляре класса, и с ними можно будет работать дальше уже через self.переменная ? Я правильно понял?
| with open('.\DATA\salary_for_all.txt', 'a', encoding='utf-8') as f: | ||
| f.write(self.name + ' ' + self.surname + ' ' + self.position + ' ' + str(salary)) | ||
| f.write('\n') | ||
| f.close() |
There was a problem hiding this comment.
f.close вызывается автоматически внутри with
There was a problem hiding this comment.
Да, автоматически перенес with из примера в интернете, а про все особенности забыл...
Задание gormal.py не выполнено. Понимаю как представить его в виде базы данных или сделать его на основе hard.py (там как-то все "срослось"...) А вот с easy.py, вообще катастрофа в PyCharm сплошные неразрешенные ссылки даже на 'self' ругается. Я немного подправил Traingle и у него стало меньше ошибок, а-то при выполнении выдавалось, что-то вроде (точно уже не помню, а записать не записал) <bound object.......имя функции в родительском классе Polygon> Triangle только инициализировался, а дальше все с ошибками вылетало еще на Polygon.polygon_perimeter, на входе а эту функцию даже 'print' не срабатывал. В общем ООП это пока еще не мое. В теории все понятно, а вот на практике, особенно, наследование (вон, в hard его не было и все сложилось...)