Python: обмен переменными между классами / объектами - PullRequest
2 голосов
/ 07 сентября 2011

Хорошо, у меня есть два класса, и один зависит от другого.Поэтому мне нужно получить переменную из первого класса и использовать ее во втором.Но вторая переменная постоянно меняется.Вот так:

class class1 :
    var1 = 0
    def meth1 (self):
        self.var1 += 1
class class2:
    var2 = class1.var1
    def see (self):
        return self.var2
obj1 = class1()
obj2 = class2()

obj1.meth1()
obj2.see()

Это вернуло бы 0, а не 1. Если я скажу print var1 в первом классе, он напечатает измененное var.Но когда class2 получает его, он все равно 0 ... Я думаю, он все еще ссылается на старый var1.Что я делаю не так и что я должен делать?

Спасибо

Ответы [ 2 ]

6 голосов
/ 07 сентября 2011
class class2:
    var2 = class1.var1

Это копия текущего значения class1.var1.

«Мне нужно получить переменную из первого класса и использовать ее во втором»

Используйте class1.var1 вместо копирования текущего значения в var2.

0 голосов
/ 16 января 2017

Вся информация о том, как копируются переменные, верна, и рекомендуемая статья хорошо объяснена.Но если вы используете class1.var1, вы никогда не получите значение self.var1 из class1.Вы можете проверить почему с помощью следующего кода:

class Class1 :
var1 = 0
def meth1 (self):
    self.var1 += 1
    print(id(self.var1))

class Class2:
def meth2 (self):
    print(id(Class1.var1))

obj1 = Class1()
obj2 = Class2()

obj1.meth1()
obj2.meth2()

Где вы получаете разные идентификаторы для Class1.var1 (что составляет var1 в строке 2) и self.var1.

Если вы хотите получить значение self.var1 из Class2, вы должны инициализировать var1 вне класса и сделать его глобальным внутри функции, в которую вы добавите число:

var1 = 0
class class1 :

    def meth1 (self):
        global var1
        var1 += 1

class class2:

    def meth2 (self):
        print(var1)

obj1 = class1()
obj2 = class2()

obj1.meth1()
obj2.meth2()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...