我如何从一个类访问变量到另一个类?

时间:2013-11-15 04:54:07

标签: python class variables

我正在编写一个使用多个类的程序。我有一个专门用于确定一组变量值的类。然后,我希望能够使用其他类访问这些变量的值。我的代码如下:

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)。然后我使用methodA来添加它们,将结果保存为var1(我认为这将使var1 = 3和var2 = 2)。我想知道的是,如何让ClassB能够从ClassA获取var1和var2的值?

5 个答案:

答案 0 :(得分:39)

var1var2instance variables。这意味着您必须将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

另一方面 - 如果您使用class variables,则可以访问var1和var2,而无需将object1作为参数发送到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

但请注意,类变量在其类的所有实例之间共享。

答案 1 :(得分:6)

你能解释为什么你想要这样做吗?

你正在玩实例变量/属性,它们不会从一个类迁移到另一个类(它们甚至不会绑定到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.var1ClassB.var1或甚至从实例ClassA().var1访问类变量(前提是您尚未添加将在之前解析的实例方法var1属性查找中的类变量。

在我知道这是否是我实际推荐的行动方案之前,我必须更多地了解您的特定用例...

答案 2 :(得分:1)

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

答案 3 :(得分:0)

var1和var2是 ClassA 的实例变量。创建ClassB的实例,并在调用methodA时首先检查子类( ClassB )中的methodA,如果 ClassB 中不存在methodA,则需要调用< strong> ClassA (使用 super() method ),它将为您提供在 ClassA 中实现的所有方法。现在,您可以访问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):
        super().__init__()
        print("var1",self.var1)
        print("var2",self.var2)


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

答案 4 :(得分:0)

只需在类中创建变量。然后从该类继承以访问其变量。但是在访问它们之前,必须调用父类来初始化变量。

class a:
    def func1(self):
        a.var1 = "Stack "

class b:
    def func2(self):
        b.var2 = "Overflow"

class c(a,b):
    def func3(self):
        c.var3 = a.var1 + b.var2
        print(c.var3)

a().func1()
b().func2()
c().func3()