Как получить доступ к переменным из одного класса в другой?
Я пишу программу, использующую несколько классов. У меня есть один класс, посвященный определению значений для набора переменных. Затем мне хотелось бы получить доступ к значениям этих переменных с другими классами. Мой код выглядит следующим образом:
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?
Ответы
Ответ 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