Подтвердить что ты не робот

Как получить доступ к переменным из одного класса в другой?

Я пишу программу, использующую несколько классов. У меня есть один класс, посвященный определению значений для набора переменных. Затем мне хотелось бы получить доступ к значениям этих переменных с другими классами. Мой код выглядит следующим образом:

class ClassA(object):
    def __init__(self):
        self.var1 = 1
        self.var2 = 2

    def methodA(self):
        self.var1 = self.var1 + self.var2
        return self.var1


class ClassB(ClassA):
    def __init__(self):
        self.var1 = ?
        self.var2 = ?

object1 = ClassA()
sum = object1.methodA()
print sum

Я использую classA для инициализации 2 переменных (var1 и var2). Затем я использую метод А для их добавления, сохраняя результат как var1 (я думаю, что это сделает var1 = 3 и var2 = 2). Я хочу знать, как бы у меня ClassB можно было получить значения для var1 и var2 из ClassA?

4b9b3361

Ответ 1

var1 и var2 являются переменными экземпляра. Это означает, что вам нужно отправить экземпляр ClassA в ClassB, чтобы ClassB мог его получить, т.е.

class ClassA(object):
    def __init__(self):
        self.var1 = 1
        self.var2 = 2

    def methodA(self):
        self.var1 = self.var1 + self.var2
        return self.var1



class ClassB(ClassA):
    def __init__(self, class_a):
        self.var1 = class_a.var1
        self.var2 = class_a.var2

object1 = ClassA()
sum = object1.methodA()
object2 = ClassB(object1)
print sum

С другой стороны - если бы вы использовали переменные класса , вы могли бы получить доступ к var1 и var2 без отправки объекта1 в качестве параметра ClassB.

class ClassA(object):
    var1 = 0
    var2 = 0
    def __init__(self):
        ClassA.var1 = 1
        ClassA.var2 = 2

    def methodA(self):
        ClassA.var1 = ClassA.var1 + ClassA.var2
        return ClassA.var1



class ClassB(ClassA):
    def __init__(self):
        print ClassA.var1
        print ClassA.var2

object1 = ClassA()
sum = object1.methodA()
object2 = ClassB()
print sum

Обратите внимание, однако, что переменные класса разделяются между всеми экземплярами его класса.

Ответ 2

Можете ли вы объяснить, почему вы хотите это сделать?

Вы играете с переменными/атрибутами экземпляра, которые не будут переноситься из одного класса в другой (они привязаны не к ClassA, а к конкретному экземпляру ClassA, который вы создали при написании ClassA()). Если вы хотите, чтобы изменения в одном классе отображались в другом, вы можете использовать переменные класса:

class ClassA(object):
   var1 = 1
   var2 = 2
   @classmethod
   def method(cls):
       cls.var1 = cls.var1 + cls.var2
       return cls.var1

В этом случае ClassB выберет значения из ClassA из наследования. Затем вы можете получить доступ к переменным класса через ClassA.var1, ClassB.var1 или даже из экземпляра ClassA().var1 (при условии, что вы не добавили метод экземпляра var1, который будет разрешен перед переменной класса при поиске атрибута.

Мне нужно узнать немного больше о вашем конкретном случае использования, прежде чем я узнаю, что это курс действий, который я бы рекомендовал, хотя...

Ответ 3

class ClassA(object):
    def __init__(self):
        self.var1 = 1
        self.var2 = 2
    def method(self):
        self.var1 = self.var1 + self.var2
        return self.var1

class ClassB(ClassA):
    def __init__(self):
        ClassA.__init__(self)

object1 = ClassA() 
sum = object1.method()  
object2 = ClassB() 
print sum