Примеры создания классов
В этом примере внутри класса описывается свойство 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()