Примеры создания классов
В этом примере внутри класса описывается свойство color
:
class Phone:
color = (0, 0, 0)
p1 = Phone()
p2 = Phone()
print(p1.color)
print(p2.color)
Свойство или атрибут - это переменная, объявленная внутри класса.
У разных экземпляров класса значения свойств могут меняться:
class Phone:
color = (0, 0, 0)
p1 = Phone()
p2 = Phone()
p3 = Phone()
p3.color = (255, 0, 0)
print(p1.color)
print(p2.color)
print(p3.color)
Метод - это функция, объявленная внутри класса:
class Phone:
color = (0, 0, 0)
def output():
print(color)
p1 = Phone()
p2 = Phone()
p3 = Phone()
p3.color = (255, 0, 0)
p1.output()
p2.output()
p3.output()
В этом примере программа завершается с ошибкой. У каждого экземпляра значение свойства color
может отличаться. При выполнении print(color)
возникает вопрос: какое значение нужно вывести? Нужно сделать так, чтобы выводился цвет конкретного объекта.
Чтобы избежать ошибки, нужно конкретный объект передать в функцию в качестве параметра:
class Phone:
color = (0, 0, 0)
def output(p):
print(p.color)
p1 = Phone()
p2 = Phone()
p3 = Phone()
p3.color = (255, 0, 0)
output(p1)
output(p2)
output(p3)
Переменная p
в функции output()
указывает на экземпляр класса Phone
. Такой способ позволяет одной функции работать с разными объектами.
Чтобы метод работал со свойствами того экземпляра, из которого он был вызван, нужно, чтобы метод принимал параметр, указывающий на объект - точно так, как это делает функция output()
.Для этого используется ключевое слово self
(свой):
class Phone:
color = (0, 0, 0)
def output(self):
print(self.color)
p1 = Phone()
p2 = Phone()
p3 = Phone()
p3.color = (255, 0, 0)
p1.output()
p2.output()
p3.output()