Я только начал изучать Python, и это меня немного смутило. Пытаясь выяснить, как все это работает в целом, я придумал этот очень простой кусок кода:
# Create a class with a variable inside and an instance of that class
class One:
color = 'green'
obj2 = One()
# Here we create a global variable(outside a class suite).
color = 'blue'
# Create a second class and a local variable inside this class.
class Two:
color = "red"
# Define 3 methods. The only difference between them is the "color" part.
def out(self):
print(self.color + '!')
def out2(self):
print(color + '!')
def out3(self):
print(obj2.color + '!')
# Create an object of the class One
obj = Two()
Когда мы звоним out()
, мы получаем:
>>> obj.out()
red!
Когда мы звоним out2()
:
>>> obj.out2()
blue!
Когда мы звоним out3()
:
>>> obj.out3()
green!
Итак, в первом методе self
указывает, что Python должен использовать переменную (атрибут), которая «принадлежит» объекту класса, который мы создали, а не глобальный (вне класса). Так что он использует color = "red"
. В методе Python неявно подставляет self
имя созданного нами объекта (obj
). self.color
означает "Я получаю color="red"
от obj
"
Во втором методе нет self
для указания объекта, из которого должен быть взят цвет, поэтому он получает глобальный color = 'blue'
.
В третьем методе вместо self
мы использовали obj2
- имя другого объекта для получения color
. Это получает color = 'green'
.