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

问题描述 投票:27回答:4

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

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的值?

python class variables
4个回答
46
投票

[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,则可以在不将object1作为参数发送给ClassB的情况下访问var1和var2。

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

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


7
投票

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

您正在玩的instance variables / attributes不会从一个类迁移到另一个类(它们甚至不绑定到ClassA,而是绑定到ClassA的特定instance ](您在写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,该实例方法将在属性查找中的类变量之前解决)。 >

我必须先对您的特定用例有更多了解,然后才能知道这是否是我实际上建议的行动方案...


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

0
投票

我们可以使用对象引用将参数/变量从一个类访问/传递到另一类。

© www.soinside.com 2019 - 2024. All rights reserved.