Ах, обсуждение классов. Таким образом, x и y, которые вы определили «глобально», на самом деле не являются глобальными, они являются объектами класса и доступны из класса. Например,
class thing:
x = 10
def func(self):
print(thing.x)
Обратите внимание, что «x» присоединен к классу «вещь». Следовательно, «х» не является глобальным. В общем, все внутри класса доступно через класс и не отделено от внешнего пространства.
Конечно, одно из ОСНОВНЫХ преимуществ использования классов состоит в том, что все функции и переменные имеют общее пространство имен. Экземпляр этого пространства имен называется «self» и автоматически передается всем функциям класса. Следовательно, делать "thing.x" совершенно не нужно (и требует, чтобы я знал имя класса). Вместо этого мы можем сделать:
class thing:
x = 10
def func(self):
print(self.x)
Мы можем, конечно, go дальше. Если я могу всегда обращаться к себе в классе, то, если я присоединяюсь к себе, другие функции смогут автоматически видеть это вложение. Давайте попробуем:
class Program:
x = 0 #Default value if we don't overwrite.
y = 0 #Default value if we don't overwrite.
def kindle(self):
self.x = 2 #Overwrote the default.
self.y = 3 #Overwrote the default.
#No need to return anything. Self already has x and y attached.
def bundle(self):
z = self.x + self.y
print(z)
#z is not attached to self, hence z is only available in this function.
def main():
p = Program() #Create an instance of the Program class.
p.kindle() #Overwrite the default x and y values for just this instance.
p.bundle() #Add the values and print.
if __name__ == "__main__":
main()