Skip to content

Lesson6 - #5

Open
SRytv wants to merge 8 commits into
masterfrom
lesson6
Open

Lesson6#5
SRytv wants to merge 8 commits into
masterfrom
lesson6

Conversation

@SRytv

@SRytv SRytv commented Sep 23, 2018

Copy link
Copy Markdown
Owner

Задание gormal.py не выполнено. Понимаю как представить его в виде базы данных или сделать его на основе hard.py (там как-то все "срослось"...) А вот с easy.py, вообще катастрофа в PyCharm сплошные неразрешенные ссылки даже на 'self' ругается. Я немного подправил Traingle и у него стало меньше ошибок, а-то при выполнении выдавалось, что-то вроде (точно уже не помню, а записать не записал) <bound object.......имя функции в родительском классе Polygon> Triangle только инициализировался, а дальше все с ошибками вылетало еще на Polygon.polygon_perimeter, на входе а эту функцию даже 'print' не срабатывал. В общем ООП это пока еще не мое. В теории все понятно, а вот на практике, особенно, наследование (вон, в hard его не было и все сложилось...)

Comment thread Lesson6/SRHw06_easy.py
#примает, хранит и обрабатывает координаты вершин многоугольника
#в виде кортежей (x,y),
# начиная от первой самой левой и нижней и далее по часовой чтрелке
polygon_vertices = ()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем вы сюда эту строоку поместили?) на вебинаре прошлом же обсуждали, что не стоит так делать

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И все-таки, какие-то, соглашения относительно правил работы программы, стоит всегда оговаривать,. Например, также как оговорить что обозначает каждая из передаваемых в программу переменная, чтобы не не рыскать по всему тексту программы, пытаясь понять почему программа работает не "так".

Comment thread Lesson6/SRHw06_easy.py
class Triangle(Polygon):
side1 = 0
side2 = 0
side3 = 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

никогда так не делайте! в python это значит не тоже самое, что в других языках! вы тут объявили 3 переменные, которые существуют в классе(!) а не в объекте - то есть статические переменные.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, согласен был не прав! Не подумал о статичности!

Comment thread Lesson6/SRHw06_easy.py
area = 0
hight = 0
Tapezoid_perimeter = 0
self.side1 = Polygon.sidesize(self, self.polygon_vertices[0], self.polygon_vertices[1])

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь необходимо весь код поместить в init

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вообще-то я понадеялся на init базового класса Polygon, или init у потомков все равно должно быть свое?! Ведь здесь ничего, кроме того, чтобы запомнить координаты n-вершин, других действий нет. Или я опять чго-то не понимаю?! ;о(

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, действительно, не понимаю. Пусть переменные статические, и в классе. Все равно, ведь хранение их и должно быть в потомке-объекте, с обращением по 'self''. Ведь доже если будет другой потомок, тоже использующий класс Polygon у него же будет свой 'self'?!!

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

объекты хранятся в self, а self - это ссылка на объект, к self в классе можно обращаться только в методах. Расскажу сегодня ещё раз

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

То, есть, все необходимые классу(потомку) переменные нужно "объявить" или правильнее инициализировать в init тогда они будут существовать в экземпляре класса, и с ними можно будет работать дальше уже через self.переменная ? Я правильно понял?

Comment thread Lesson6/SRHW06_hard.py
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()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

f.close вызывается автоматически внутри with

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, автоматически перенес with из примера в интернете, а про все особенности забыл...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants